Jo jeste jsem si vzpomnel ze mam stale INVERZE udelany bez parametru (proste ho ignoruje a prohodi atributy). Protoze to bylo snazsi a nemusel jsem se snazit pochopit tu kombinaci promennych a flagu v ROMce. Takze i ty barvy si ukladam u sebe a nesnazim se prijit pro jakou cast obrazovky existuje spravna promenna. Protoze tam je i nejake TEMP a jeste na to testuje flag promennou... A nemam podporu pro OVER. Vlastne me to jeste tiskne jen 4 pixely (znak ma jen 4 bajty) a paty pixel je mezera a tu ignoruji, spravne bych ji mel nulovat.
Kód:
;vvvv
include(`../M4/FIRST.M4')dnl
;^^^^
define({USE_FONT_5x8})
ZX_CONSTANT
org 0x8000
INIT(6000)
PUSH(0xF5) ;# token {PRINT}
EMIT
PUSH(100) PUSH(0) DO
I UDOT CR
LOOP
PRINT_I("Konec...", 0x0D)
PRINT_I({ZX_AT,12,5,"Hello,",ZX_INVERSE,1," Speccy!", ZX_INVERSE, 0,ZX_EOL,}dnl
{"dalsi radek na ",ZX_PAPER, ZX_YELLOW, "zlute...",}dnl
{ZX_AT,0,0,"pocatek", ZX_INK, ZX_BLUE," modrou!", ZX_EOL,}dnl
{" !",0x22,0x23,"$%&'()*+,-./0123456789:;<=>?", ZX_EOL,}dnl
{"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[",0x5C,"]^_", ZX_EOL,}dnl
{"`abcdefghijklmnopqrstuvwxyz{|}~",0x7F, ZX_EOL,}dnl
{"abc",ZX_TAB,5,"x",ZX_TAB,6,"y",ZX_TAB,MAX_X+6,"Nuclear war...",ZX_TAB,10,"sin(PI*2.7849)*23+(536+123)*2^7", ZX_EOL,}dnl
{ZX_TAB,30,"Test zalomeni pres tretiny...",}dnl
{ZX_AT,20,12,"AT(20,12) ",ZX_BRIGHT,1,"BRIGHT ",ZX_BRIGHT,0,}dnl
{ZX_AT,21,12,"AT(21,12) ",ZX_FLASH, 1,"FLASH ", ZX_FLASH, 0,"end"})
STOP
Kód:
;vvvv
;^^^^
ZX_EOL EQU 0x0D ; zx_constant end of line
ZX_INK EQU 0x10 ; zx_constant colour
ZX_PAPER EQU 0x11 ; zx_constant colour
ZX_FLASH EQU 0x12 ; zx_constant 0 or 1
ZX_BRIGHT EQU 0x13 ; zx_constant 0 or 1
ZX_INVERSE EQU 0x14 ; zx_constant 0 or 1
ZX_OVER EQU 0x15 ; zx_constant 0 or 1
ZX_AT EQU 0x16 ; zx_constant Y,X
ZX_TAB EQU 0x17 ; zx_constant # spaces
ZX_BLACK EQU %000 ; zx_constant
ZX_BLUE EQU %001 ; zx_constant
ZX_RED EQU %010 ; zx_constant
ZX_MAGENTA EQU %011 ; zx_constant
ZX_GREEN EQU %100 ; zx_constant
ZX_CYAN EQU %101 ; zx_constant
ZX_YELLOW EQU %110 ; zx_constant
ZX_WHITE EQU %111 ; zx_constant
org 0x8000
;# token {PRINT}
; === b e g i n ===
ld (Stop+1), SP ; 4:20 init storing the original SP value when the "bye" word is used
ld L, 0x1A ; 2:7 init Upper screen
call 0x1605 ; 3:17 init Open channel
ld HL, PRINT_OUT ; 3:10 init
ld (CURCHL),HL ; 3:16 init
ld HL,draw_char ; 3:10 init
ld (PRINT_OUT),HL ; 3:10 init
if 0
ld HL, 0x0000 ; 3:10 init
ld (cursor),HL ; 3:16 init
else
ld HL, 0x1821 ; 3:10 init
ld DE,(0x5C88) ; 4:20 init
or A ; 1:4 init
sbc HL, DE ; 2:15 init
ld A, L ; 1:4 init x
add A, A ; 1:4 init 2*x
inc A ; 1:4 init 2*2+1
add A, A ; 1:4 init 4*x+2
add A, A ; 1:4 init 8*x+4
ld L, 0xFF ; 2:7 init
inc L ; 1:4 init
sub 0x05 ; 2:7 init
jr nc, $-3 ; 2:7/12 init
ld (cursor),HL ; 3:16 init
endif
ld HL, 0x1770 ; 3:10 init Return address stack = 6000
exx ; 1:4 init
ld A, 0xF5 ; 2:7 0xF5 emit Pollutes: AF, AF', DE', BC'
rst 0x10 ; 1:11 0xF5 emit putchar(reg A) with ZX 48K ROM
ld BC, 0 ; 3:10 100 0 do_101(xm)
do101save: ; 100 0 do_101(xm)
ld (idx101),BC ; 4:20 100 0 do_101(xm)
do101: ; 100 0 do_101(xm)
push DE ; 1:11 i_101(m) ( -- i )
ex DE, HL ; 1:4 i_101(m)
ld HL, (idx101) ; 3:16 i_101(m) idx always points to a 16-bit index
call PRT_U16 ; 3:17 u. ( u -- )
ld A, 0x0D ; 2:7 cr Pollutes: AF, AF', DE', BC'
rst 0x10 ; 1:11 cr putchar(reg A) with ZX 48K ROM
;[12:45] loop_101 variant +1.B: 0 <= index < stop <= 256, run 100x
idx101 EQU $+1 ; loop_101 idx always points to a 16-bit index
ld A, 0 ; 2:7 loop_101 0.. +1 ..(100), real_stop:0x0064
nop ; 1:4 loop_101 hi(index) = 0 = nop -> idx always points to a 16-bit index.
inc A ; 1:4 loop_101 index++
ld (idx101),A ; 3:13 loop_101
xor 0x64 ; 2:7 loop_101 lo(real_stop)
jp nz, do101 ; 3:10 loop_101 index-stop
leave101: ; loop_101
exit101: ; loop_101
ld BC, string101 ; 3:10 print_i Address of string101 ending with inverted most significant bit
call PRINT_STRING_I ; 3:17 print_i
ld BC, string102 ; 3:10 print_i Address of string102 ending with inverted most significant bit
call PRINT_STRING_I ; 3:17 print_i
Stop: ; stop
ld SP, 0x0000 ; 3:10 stop restoring the original SP value when the "bye" word is used
ld HL, 0x2758 ; 3:10 stop
exx ; 1:4 stop
ret ; 1:10 stop
; ===== e n d =====
;------------------------------------------------------------------------------
; Input: HL
; Output: Print unsigned decimal number in HL
; Pollutes: AF, BC, HL <- DE, DE <- (SP)
PRT_U16: ; prt_u16
xor A ; 1:4 prt_u16 HL=103 & A=0 => 103, HL = 103 & A='0' => 00103
ld BC, -10000 ; 3:10 prt_u16
call BIN16_DEC ; 3:17 prt_u16
ld BC, -1000 ; 3:10 prt_u16
call BIN16_DEC ; 3:17 prt_u16
ld BC, -100 ; 3:10 prt_u16
call BIN16_DEC ; 3:17 prt_u16
ld C, -10 ; 2:7 prt_u16
call BIN16_DEC ; 3:17 prt_u16
ld A, L ; 1:4 prt_u16
pop HL ; 1:10 prt_u16 load ret
ex (SP),HL ; 1:19 prt_u16
ex DE, HL ; 1:4 prt_u16
jr BIN16_DEC_CHAR ; 2:12 prt_u16
;------------------------------------------------------------------------------
; Input: A = 0 or A = '0' = 0x30 = 48, HL, IX, BC, DE
; Output: if ((HL/(-BC) > 0) || (A >= '0')) print number -HL/BC
; Pollutes: AF, HL
inc A ; 1:4 bin16_dec
BIN16_DEC: ; bin16_dec
add HL, BC ; 1:11 bin16_dec
jr c, $-2 ; 2:7/12 bin16_dec
sbc HL, BC ; 2:15 bin16_dec
or A ; 1:4 bin16_dec
ret z ; 1:5/11 bin16_dec does not print leading zeros
BIN16_DEC_CHAR: ; bin16_dec
or '0' ; 2:7 bin16_dec 1..9 --> '1'..'9', unchanged '0'..'9'
rst 0x10 ; 1:11 bin16_dec putchar(reg A) with ZX 48K ROM
ld A, '0' ; 2:7 bin16_dec reset A to '0'
ret ; 1:10 bin16_dec
;------------------------------------------------------------------------------
; Print string ending with inverted most significant bit
; In: BC = addr string_imsb
; Out: BC = addr last_char + 1
rst 0x10 ; 1:11 print_string_i putchar(reg A) with ZX 48K ROM
PRINT_STRING_I: ; print_string_i
ld A,(BC) ; 1:7 print_string_i
inc BC ; 1:6 print_string_i
or A ; 1:4 print_string_i
jp p, $-4 ; 3:10 print_string_i
and 0x7f ; 2:7 print_string_i
rst 0x10 ; 1:11 print_string_i putchar(reg A) with ZX 48K ROM
ret ; 1:10 print_string_i
;==============================================================================
; Print text with 5x8 font
; entry point is draw_char
MAX_X equ 51 ; x = 0..50
MAX_Y equ 24 ; y = 0..23
CURCHL equ 0x5C51
PRINT_OUT equ 0x5CBB
set_ink: ; putchar 0x10
ld HL, self_attr ; 3:10 putchar
xor (HL) ; 1:7 putchar
and 0x07 ; 2:7 putchar
xor (HL) ; 1:7 putchar
jr set_attr ; 2:12 putchar
set_paper: ; putchar 0x11
ld HL, self_attr ; 3:10 putchar
add A, A ; 1:4 putchar 2x
add A, A ; 1:4 putchar 4x
add A, A ; 1:4 putchar 8x
xor (HL) ; 1:7 putchar
and 0x38 ; 2:7 putchar
xor (HL) ; 1:7 putchar
jr set_attr ; 2:12 putchar
set_flash: ; putchar 0x12
rra ; 1:4 putchar carry = flash
ld HL, self_attr ; 3:10 putchar
ld A,(HL) ; 1:7 putchar
adc A, A ; 1:4 putchar
rrca ; 1:4 putchar
jr set_attr ; 2:12 putchar
set_bright: ; putchar 0x13
ld HL, self_attr ; 3:10 putchar
rrca ; 1:4 putchar
rrca ; 1:4 putchar
xor (HL) ; 1:7 putchar
and 0x40 ; 2:7 putchar
xor (HL) ; 1:7 putchar
jr set_attr ; 2:12 putchar
set_inverse: ; putchar 0x14
ld HL, self_attr ; 3:10 putchar
ld A,(HL) ; 1:7 putchar
and 0x38 ; 2:7 putchar A = 00pp p000
add A, A ; 1:4 putchar
add A, A ; 1:4 putchar A = ppp0 0000
xor (HL) ; 1:7 putchar
and 0xF8 ; 2:7 putchar
xor (HL) ; 1:7 putchar A = ppp0 0iii
rlca ; 1:4 putchar
rlca ; 1:4 putchar
rlca ; 1:4 putchar A = 00ii ippp
xor (HL) ; 1:7 putchar
and 0x3F ; 2:7 putchar
xor (HL) ; 1:7 putchar A = fbii ippp
set_attr: ; putchar
ld (HL),A ; 1:7 putchar save new attr
clean_set_0: ; putchar
xor A ; 1:4 putchar
clean_set_A: ; putchar
ld (self_jmp),A ; 3:13 putchar
pop HL ; 1:10 putchar
ret ; 1:10 putchar
set_over: ; putchar 0x15
jr clean_set_0 ; 2:12 putchar
set_at: ; putchar 0x16
ld (cursor+1),A ; 3:13 putchar save new Y
neg ; 2:8 putchar
add A, 0x18 ; 2:7 putchar
ld (0x5C89),A ; 3:13 putchar
ld A,$+4-jump_from; 2:7 putchar
jr clean_set_A ; 2:12 putchar
set_at_x: ; putchar
ld (cursor),A ; 3:13 putchar save new X
jr clean_set_0 ; 2:12 putchar
if 0
jr print_comma ; 2:12 putchar 0x06
jr print_edit ; 2:12 putchar 0x07
jr cursor_left ; 2:12 putchar 0x08
jr cursor_right ; 2:12 putchar 0x09
jr cursor_down ; 2:12 putchar 0x0A
jr cursor_up ; 2:12 putchar 0x0B
jr delete ; 2:12 putchar 0x0C
jr enter ; 2:12 putchar 0x0D
jr not_used ; 2:12 putchar 0x0E
jr not_used ; 2:12 putchar 0x0F
endif
tab_spec: ; putchar
jr set_ink ; 2:12 putchar 0x10
jr set_paper ; 2:12 putchar 0x11
jr set_flash ; 2:12 putchar 0x12
jr set_bright ; 2:12 putchar 0x13
jr set_inverse ; 2:12 putchar 0x14
jr set_over ; 2:12 putchar 0x15
jr set_at ; 2:12 putchar 0x16
; jr set_tab ; 2:12 putchar 0x17
set_tab: ; putchar
ld HL,(cursor) ; 3:16 putchar load origin cursor
sub MAX_X ; 2:7 putchar
jr nc,$-2 ; 2:7/12 putchar
add A, MAX_X ; 2:7 putchar (new x) mod MAX_X
cp L ; 1:4 putchar
call c, next_line ; 3:10/17 putchar new x < (old x+1)
set_tab_A ; putchar
ld L, A ; 1:4 putchar
ld (cursor),HL ; 3:16 putchar save new cursor
jr clean_set_0 ; 2:12 putchar
cursor_left: ; putchar 0x08
ld HL,(cursor) ; 3:16 putchar
inc L ; 1:4 putchar
dec L ; 1:4 putchar
dec HL ; 1:6 putchar
jr nz, $+4 ; 2:7/12 putchar
ld L, MAX_X-1 ; 2:7 putchar
jr enter_exit ; 2:12 putchar
print_comma: ; putchar 0x06
ld HL,(cursor) ; 3:16 putchar
ld A, 17 ; 2:7 putchar
cp L ; 1:4 putchar
jr nc, set_tab_A ; 2:12 putchar
add A, A ; 1:4 putchar
cp L ; 1:4 putchar
jr nc, set_tab_A ; 2:12 putchar
xor A ; 1:4 putchar
enter: ; putchar 0x0D
call z, next_line ; 3:10/17 putchar
enter_exit: ; putchar
ld (cursor),HL ; 3:16 putchar save new cursor
pop HL ; 1:10 putchar load HL
ret ; 3:10
print_edit: ; putchar 0x07
cursor_right: ; putchar 0x09
cursor_down: ; putchar 0x0A
cursor_up: ; putchar 0x0B
delete: ; putchar 0x0C
not_used: ; putchar 0x0E, 0x0F
print_question ; putchar 0x00..0x05 + 0x0E..0x0F + 0x18..0x1F
ld A, '?' ; 2:7 putchar
jr print_char_HL ; 2:7/12 putchar
;------------------------------------------------------------------------------
; Input: A = char
; Poluttes: AF, AF', DE', BC'
draw_char:
push HL ; 1:11
self_jmp equ $+1
jr jump_from ; 2:7/12 self-modifying
jump_from:
cp 0xA5 ; 2:7 token
jr nc, print_token ; 2:7/12
cp 0x20 ; 2:7
jr nc, print_char_HL ; 2:7/12
cp 0x06 ; 2:7 comma
jr z, print_comma ; 2:7/12
cp 0x08 ; 2:7 cursor_left
jr z, cursor_left ; 2:7/12
cp 0x0D ; 2:7 enter
jr z, enter ; 2:7/12
sub 0x10 ; 2:7 set_ink
jr c, print_question ; 2:7/12
cp 0x08 ; 2:7 >print_tab
jr nc, print_question ; 2:7/12
draw_spec:
add A,A ; 1:4 2x
sub jump_from-tab_spec ; 2:7
ld (self_jmp),A ; 3:13
draw_spec_exit: ;
pop HL ; 1:10
ret ; 1:10
print_token:
ex DE, HL ; 1:4
ld DE, 0x0095 ; 3:10 The base address of the token table
sub 0xA5 ; 2:7
push AF ; 1:11 Save the code on the stack. (Range +00 to +5A, to COPY).
; Input
; A Message table entry number
; DE Message table start address
; Output
; DE Address of the first character of message number A
; F Carry flag: suppress (set) or allow (reset) a leading space
call 0x0C41 ; 3:17 THE 'TABLE SEARCH' SUBROUTINE
ex DE, HL ; 1:4
ld A,' ' ; 2:7 A 'space' will be printed before the message/token if required (bit 0 of FLAGS reset).
bit 0,(IY+0x01) ;
call z, print_char ; 3:17
; The characters of the message/token are printed in turn.
token_loop:
ld A,(HL) ; 1:7 Collect a code.
and 0x7F ; 2:7 Cancel any 'inverted bit'.
call print_char ; 3:17 Print the character.
ld A,(HL) ; 1:7 Collect the code again.
inc HL ; 1:6 Advance the pointer.
add A, A ; 1:4 The 'inverted bit' goes to the carry flag and signals the end of the message/token; otherwise jump back.
jr nc, token_loop ; 2:7/12
; Now consider whether a 'trailing space' is required.
pop HL ; 1:10 For messages, H holds +00; for tokens, H holds +00 to +5A.
cp 0x48 ; 2:7 Jump forward if the last character was a '$'
jr z, $+6 ; 2:7/12
cp 0x82 ; 2:7 Return if the last character was any other before 'A'.
jr c, draw_spec_exit ; 2:7/12
ld A, H ; 1:4 Examine the value in H and return if it indicates a message, , INKEY$ or PI.
cp 0x03 ; 2:7
ld A, ' ' ; 2:7 All other cases will require a 'trailing space'.
ret c ; 1:5/11
pop HL ; 1:10
print_char:
push HL ; 1:11 uschovat HL na zásobník
print_char_HL:
exx ; 1:4
push DE ; 1:11 uschovat DE na zásobník
push BC ; 1:11 uschovat BC na zásobník
push HL ; 1:11 uschovat HL na zásobník
ld BC, FONT_ADR ; 3:10 adresa, od níž začínají masky znaků
add A, A ; 1:4
ld L, A ; 1:4 2x
ld H, 0x00 ; 1:4 C je nenulové
add HL, HL ; 1:11 4x
add HL, BC ; 1:11 přičíst bázovou adresu masek znaků
exx ; 1:4
;# YX -> ATTR
cursor equ $+1
ld DE, 0x0000 ; 3:10
ld A, E ; 1:4 X
add A, A ; 1:4 2*X
add A, A ; 1:4 4*X
add A, E ; 1:4 5*X
ld B, A ; 1:4 save 5*X
xor D ; 1:4
and 0xF8 ; 2:7
xor D ; 1:4
rrca ; 1:4
rrca ; 1:4
rrca ; 1:4
ld L, A ; 1:4
ld A, D ; 1:4
or 0xC7 ; 2:7 110y y111, reset carry
rra ; 1:4 0110 yy11, set carry
rrca ; 1:4 1011 0yy1, set carry
ccf ; 1:4 reset carry
rra ; 1:4 0101 10yy
ld H, A ; 1:4
self_attr equ $+1
ld (HL),0x38 ; 2:10 uložení atributu znaku
ld A, D ; 1:4
and 0x18 ; 2:7
or 0x40 ; 2:7
ld H, A ; 1:4
ld A, B ; 1:4 load 5*X
and 0x07 ; 2:7
cpl ; 1:4
add A, 0x09 ; 2:7
ld B, A ; 2:7 pocitadlo pro pocatecni posun vlevo masky znaku
exx ; 1:4
ld C, A ; 1:4
exx ; 1:4
ex DE, HL ; 1:4
ld HL, 0x00F0 ; 3:10
add HL, HL ; 1:11 pocatecni posun masky
djnz $-1 ; 2:8/13
ex DE, HL ; 1:4
ld C, 4 ; 2:7
loop_c:
exx ; 1:4
ld A,(HL) ; 1:7
inc HL ; 1:6
ld B, C ; 1:4
rlca ; 1:4
djnz $-1 ; 2:8/13
ld B, A ; 1:4
exx ; 1:4
ld B, 2 ; 2:7
loop_b:
xor (HL) ; 1:7
and D ; 1:4
xor (HL) ; 1:7
ld (HL),A ; 1:4 ulozeni jednoho bajtu z masky
exx ; 1:4
ld A, B ; 1:4 načtení druhe poloviny "bajtu" z masky
exx ; 1:4
inc L ; 1:4
xor (HL) ; 1:7
and E ; 1:4
xor (HL) ; 1:7
ld (HL),A ; 1:4 ulozeni jednoho bajtu z masky
dec L ; 1:4
inc H ; 1:4
exx ; 1:4
ld A, B ; 1:4 načtení jednoho bajtu z masky
rlca ; 1:4
rlca ; 1:4
rlca ; 1:4
rlca ; 1:4
ld B, A ; 1:4
exx ; 1:4
; halt
djnz loop_b ; 2:8/13
dec C ; 2:7
jr nz, loop_c ; 2/7/12
pop HL ; 1:10 obnovit obsah HL ze zásobníku
pop BC ; 1:10 obnovit obsah BC ze zásobníku
pop DE ; 1:10 obnovit obsah DE ze zásobníku
exx ; 1:4
; fall to next cursor
ld HL,(cursor) ; 3:16
; Input: HL = YX
; Output: HL = cursor = next cursor
next_cursor:
inc L ; 1:4 0..50
ld A, L ; 1:4
sub MAX_X ; 2:7 -51
call nc, next_line ; 3:10/17
next_exit:
ld (cursor),HL ; 3:16
exit_hl: ;
pop HL ; 1:10 obnovit obsah HL ze zásobníku
ret ; 1:10
; Input:
; Output: H = Y+1/Y+0+scroll, L=0
next_line:
push AF ; 1:11 putchar
ld HL, 0x5C88 ; 3:10 putchar
ld (HL), 0x01 ; 2:10 putchar
ld A, 0x15 ; 2:7 putchar over
push HL ; 1:11 putchar
call 0x09F4 ; 3:17 putchar rst 0x10 --> call 0x09F4
exx ; 1:4 putchar
ld A, 0x01 ; 2:7 putchar over 1
rst 0x10 ; 1:11 putchar
ld A, ' ' ; 2:7 putchar space and check bios scroll
rst 0x10 ; 1:11 putchar
exx ; 1:4 putchar
ld HL,draw_char ; 3:10 putchar
ld (PRINT_OUT),HL ; 3:10 putchar
pop HL ; 1:10 putchar
ld A, 0x18 ; 2:7 putchar
inc L ; 1:4 putchar
sub (HL) ; 1:7 putchar
ld H, A ; 1:7 putchar
ld L, 0x00 ; 2:7 putchar
pop AF ; 1:10 putchar
ret ; 1:10 putchar
FONT_ADR equ FONT_5x8-32*4
FONT_5x8:
db %00000000,%00000000,%00000000,%00000000 ; 0x20 space
db %00000010,%00100010,%00100000,%00100000 ; 0x21 !
db %00000101,%01010000,%00000000,%00000000 ; 0x22 "
db %00000000,%01011111,%01011111,%01010000 ; 0x23 #
db %00000010,%01110110,%00110111,%00100000 ; 0x24 $
db %00001100,%11010010,%01001011,%00110000 ; 0x25 %
db %00000000,%11101010,%01011010,%11010000 ; 0x26 &
db %00000011,%00010010,%00000000,%00000000 ; 0x27 '
db %00000010,%01000100,%01000100,%00100000 ; 0x28 (
db %00000100,%00100010,%00100010,%01000000 ; 0x29 )
db %00000000,%00001010,%01001010,%00000000 ; 0x2A *
db %00000000,%00000100,%11100100,%00000000 ; 0x2B +
db %00000000,%00000000,%00000010,%00100100 ; 0x2C ,
db %00000000,%00000000,%11100000,%00000000 ; 0x2D -
db %00000000,%00000000,%00000000,%01000000 ; 0x2E .
db %00000000,%00010010,%01001000,%00000000 ; 0x2F /
db %00000110,%10011011,%11011001,%01100000 ; 0x30 0
db %00000010,%01100010,%00100010,%01110000 ; 0x31 1
db %00000110,%10010001,%01101000,%11110000 ; 0x32 2
db %00000110,%10010010,%00011001,%01100000 ; 0x33 3
db %00000010,%01101010,%11110010,%00100000 ; 0x34 4
db %00001111,%10001110,%00011001,%01100000 ; 0x35 5
db %00000110,%10001110,%10011001,%01100000 ; 0x36 6
db %00001111,%00010010,%01000100,%01000000 ; 0x37 7
db %00000110,%10010110,%10011001,%01100000 ; 0x38 8
db %00000110,%10011001,%01110001,%01100000 ; 0x39 9
db %00000000,%00000010,%00000010,%00000000 ; 0x3A :
db %00000000,%00000010,%00000010,%01000000 ; 0x3B ;
db %00000000,%00010010,%01000010,%00010000 ; 0x3C <
db %00000000,%00000111,%00000111,%00000000 ; 0x3D =
db %00000000,%01000010,%00010010,%01000000 ; 0x3E >
db %00001110,%00010010,%01000000,%01000000 ; 0x3F ?
db %00000000,%01101111,%10111000,%01100000 ; 0x40 @
db %00000110,%10011001,%11111001,%10010000 ; 0x41 A
db %00001110,%10011110,%10011001,%11100000 ; 0x42 B
db %00000110,%10011000,%10001001,%01100000 ; 0x43 C
db %00001110,%10011001,%10011001,%11100000 ; 0x44 D
db %00001111,%10001110,%10001000,%11110000 ; 0x45 E
db %00001111,%10001110,%10001000,%10000000 ; 0x46 F
db %00000110,%10011000,%10111001,%01110000 ; 0x47 G
db %00001001,%10011111,%10011001,%10010000 ; 0x48 H
db %00000111,%00100010,%00100010,%01110000 ; 0x49 I
db %00000111,%00010001,%00011001,%01100000 ; 0x4A J
db %00001001,%10101100,%10101001,%10010000 ; 0x4B K
db %00001000,%10001000,%10001000,%11110000 ; 0x4C L
db %00001001,%11111001,%10011001,%10010000 ; 0x4D M
db %00001001,%11011011,%10011001,%10010000 ; 0x4E N
db %00000110,%10011001,%10011001,%01100000 ; 0x4F O
db %00001110,%10011001,%11101000,%10000000 ; 0x50 P
db %00000110,%10011001,%10011010,%01010000 ; 0x51 Q
db %00001110,%10011001,%11101001,%10010000 ; 0x52 R
db %00000111,%10000110,%00010001,%11100000 ; 0x53 S
db %00001111,%00100010,%00100010,%00100000 ; 0x54 T
db %00001001,%10011001,%10011001,%01100000 ; 0x55 U
db %00001001,%10011001,%10010101,%00100000 ; 0x56 V
db %00001001,%10011001,%10011111,%10010000 ; 0x57 W
db %00001001,%10010110,%10011001,%10010000 ; 0x58 X
db %00001001,%10010101,%00100010,%00100000 ; 0x59 Y
db %00001111,%00010010,%01001000,%11110000 ; 0x5A Z
db %00000111,%01000100,%01000100,%01110000 ; 0x5B [
db %00000000,%10000100,%00100001,%00000000 ; 0x5C \
db %00001110,%00100010,%00100010,%11100000 ; 0x5D ]
db %00000010,%01010000,%00000000,%00000000 ; 0x5E ^
db %00000000,%00000000,%00000000,%11110000 ; 0x5F _
db %00000011,%01001110,%01000100,%11110000 ; 0x60 ` GBP
db %00000000,%01100001,%01111001,%01110000 ; 0x61 a
db %00001000,%11101001,%10011001,%11100000 ; 0x62 b
db %00000000,%01101001,%10001001,%01100000 ; 0x63 c
db %00000001,%01111001,%10011001,%01110000 ; 0x64 d
db %00000000,%01101001,%11111000,%01110000 ; 0x65 e
db %00110100,%11100100,%01000100,%01000000 ; 0x66 f
db %00000000,%01111001,%10010111,%00010110 ; 0x67 g
db %00001000,%11101001,%10011001,%10010000 ; 0x68 h
db %00100000,%01100010,%00100010,%01110000 ; 0x69 i
db %00010000,%00110001,%00010001,%10010110 ; 0x6A j
db %00001000,%10011010,%11001010,%10010000 ; 0x6B k
db %00001100,%01000100,%01000100,%11100000 ; 0x6C l
db %00000000,%11001011,%10111011,%10010000 ; 0x6D m
db %00000000,%10101101,%10011001,%10010000 ; 0x6E n
db %00000000,%01101001,%10011001,%01100000 ; 0x6F o
db %00000000,%11101001,%10011001,%11101000 ; 0x70 p
db %00000000,%01111001,%10011001,%01110001 ; 0x71 q
db %00000000,%10101101,%10001000,%10000000 ; 0x72 r
db %00000000,%01111000,%01100001,%11100000 ; 0x73 s
db %00000100,%11100100,%01000100,%00110000 ; 0x74 t
db %00000000,%10011001,%10011001,%01100000 ; 0x75 u
db %00000000,%10011001,%10010101,%00100000 ; 0x76 v
db %00000000,%10011001,%10011111,%10010000 ; 0x77 w
db %00000000,%10011001,%01101001,%10010000 ; 0x78 x
db %00000000,%10011001,%10010111,%00010110 ; 0x79 y
db %00000000,%11110010,%01001000,%11110000 ; 0x7A z
db %00010010,%00100100,%00100010,%00010000 ; 0x7B
db %01000100,%01000100,%01000100,%01000000 ; 0x7C |
db %10000100,%01000010,%01000100,%10000000 ; 0x7D
db %00000101,%10100000,%00000000,%00000000 ; 0x7E ~
db %00000110,%10011011,%10111001,%01100000 ; 0x7F (c)
STRING_SECTION:
string102:
db ZX_AT,12,5,"Hello,",ZX_INVERSE,1," Speccy!", ZX_INVERSE, 0,ZX_EOL, "dalsi radek na ",ZX_PAPER, ZX_YELLOW, "zlute...", ZX_AT,0,0,"pocatek", ZX_INK, ZX_BLUE," modrou!", ZX_EOL, " !",0x22,0x23,"$%&'()*+,-./0123456789:;<=>?", ZX_EOL, "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[",0x5C,"]^_", ZX_EOL, "`abcdefghijklmnopqrstuvwxyz{|}~",0x7F, ZX_EOL, "abc",ZX_TAB,5,"x",ZX_TAB,6,"y",ZX_TAB,MAX_X+6,"Nuclear war...",ZX_TAB,10,"sin(PI*2.7849)*23+(536+123)*2^7", ZX_EOL, ZX_TAB,30,"Test zalomeni pres tretiny...", ZX_AT,20,12,"AT(20,12) ",ZX_BRIGHT,1,"BRIGHT ",ZX_BRIGHT,0, ZX_AT,21,12,"AT(21,12) ",ZX_FLASH, 1,"FLASH ", ZX_FLASH, 0,"en","d" + 0x80
size102 EQU $ - string102
string101:
db "Konec...",0x0D + 0x80
size101 EQU $ - string101
PS: Asi si dam trochu pauzu, nez budu zjistovat jestli dokazi vytisknout realne cislo pomoci ROMky v tom fontu. Je toho fakt nejak moc najednou. Prilis vysoke schody na me. Tak na zebrik...