X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=testrom.asm;h=55d1bfe3eae262b91b02913fd0e635d88d9b2d38;hb=4ecc5df01ba5c77c1aa89429ae93fc4facb4c98f;hp=5d6ce67a8884fe0bd2fc8fce40c18854ecd2752e;hpb=d89b346924d2b704704a30fa0ac9bf9046f2eaa0;p=zxkeybtest diff --git a/testrom.asm b/testrom.asm index 5d6ce67..55d1bfe 100644 --- a/testrom.asm +++ b/testrom.asm @@ -1,28 +1,83 @@ ; vi:filetype=z80: -fb_addr equ $4000 -attr_addr equ $5800 -ula_port equ $fe +FB_ADDR equ $4000 +ATTR_ADDR equ $5800 +ULA_PORT equ $fe +START_ROW equ 3 + + macro PRINTSTR, row, col, str + push bc + push de + ld b, \row + ld c, \col + call calc_cell_addr + ld hl, \str + call putstr + pop de + pop bc + endm + + macro PRINTVAL, row, col, str + push bc + push de + push hl + push af + ld b, \row + ld c, \col + call calc_cell_addr + ld hl, \str + call putstr + ld hl, \str + call strlen + add e + ld e, a + pop af + call putbin8 + pop hl + pop de + pop bc + endm + + main: call init - ld c, 16 - ld b, 12 - call calc_cell_addr - ld a, 'F' - call putchar - inc de - ld a, 'O' - call putchar - inc de - ld a, 'O' - call putchar -.looptop: - jr .looptop + ld hl, FB_ADDR + 25 + call draw_logo + + PRINTSTR START_ROW, 0, str_row0 + PRINTSTR START_ROW + 1, 0, str_row1 + PRINTSTR START_ROW + 2, 0, str_row2 + PRINTSTR START_ROW + 3, 0, str_row3 + PRINTSTR START_ROW + 4, 0, str_row4 + PRINTSTR START_ROW + 5, 0, str_row5 + PRINTSTR START_ROW + 6, 0, str_row6 + PRINTSTR START_ROW + 7, 0, str_row7 + +.mainloop: + ld bc, $fefe ; c: port $fe, b: row select $fe + xor a +.rowloop: + push af + push bc + add START_ROW + ld b, a + ld c, 17 + call calc_cell_addr + + pop bc + in a, (c) + call putbin5 + rlc b + pop af + inc a + cp $8 + jr nz, .rowloop + jr .mainloop init: ; setup attributes - ld hl, attr_addr + ld hl, ATTR_ADDR ld a, $47 ld b, 24 .attry: ld c, 32 @@ -34,7 +89,7 @@ init: jr nz, .attry ; clear screen - ld hl, fb_addr + ld hl, FB_ADDR xor a ld b, 192 .clry: ld c, 32 @@ -46,7 +101,7 @@ init: jr nz, .clry ; set border - out (ula_port), a + out (ULA_PORT), a ret @@ -76,27 +131,89 @@ calc_cell_addr: ld a, b ; grap Y one more time and $7 ; keep low 3 bits of Y in a or d ; combine with Y6-Y7 - ld bc, fb_addr + ld bc, FB_ADDR or b ; combine with high byte of fb address ld d, a ; move result back to d pop af ret + ; hl: dest +draw_logo: + push hl + ld de, logo + ld b, 16 +.logoy: ld c, 7 + push bc +.logox: ld a, (de) + ld (hl), a + inc de + inc l + dec c + jr nz, .logox + ld bc, 7 + sbc hl, bc + inc h + + ld a, h + and $e7 + ld h, a + and $7 + jr nz, .skipinc + ld a, l + add $20 + ld l, a +.skipinc: + pop bc + dec b + jr nz, .logoy + pop hl + + ; attr + ld a, h + srl a + srl a + srl a + or $58 + ld h, a + ld a, $42 + + push hl + pop ix + ld b, 7 +.sattr: ld (ix), a + ld (ix + 32), a + inc ix + dec b + jr nz, .sattr + ret ; de: dest ; a: char putchar: - sub 'A' + ; is it a digit? + sub '0' + ret c + cp 11 + jr nc, .notdigit + push bc + ld bc, glyph_0 + jr .common +.notdigit: + ; is it A-Z ? + sub 'A'-'0' ret c - cp 27 + cp 30 ret nc + push bc + ld bc, glyph_a +.common: push de + push hl sla a sla a sla a ld h, 0 ld l, a - ld bc, glyph_a add hl, bc ld c, 8 .chartop: @@ -106,7 +223,81 @@ putchar: inc hl dec c jr nz, .chartop + pop hl + pop de + pop bc + ret + + ; de: dest + ; hl: str +putstr: + push de + push bc +.loop: xor a + ld b, (hl) + cp b + jr z, .done + ld a, b + call putchar + inc hl + inc e + jr .loop +.done: pop bc + pop de + ret + + ; de: dest + ; a: number +putbin8: + push de + push bc + ld b, 8 +.loop: rlca + push af + and 1 + add '0' + call putchar + pop af + inc e + dec b + jr nz, .loop + pop bc pop de ret +putbin5: + push de + push bc + ld b, 5 + rlca + rlca + rlca + jr putbin8.loop + + ; hl: string + ; return -> a +strlen: + push hl + xor a + ld b, a +.loop: cp (hl) + jr z, .done + inc hl + inc b + jr .loop +.done: ld a, b + pop hl + ret + + +str_row0 asciiz 'ROW0: V C X Z [: ' +str_row1 asciiz 'ROW1: G F D S A: ' +str_row2 asciiz 'ROW2: T R E W Q: ' +str_row3 asciiz 'ROW3: 5 4 3 2 1: ' +str_row4 asciiz 'ROW4: 6 7 8 9 0: ' +str_row5 asciiz 'ROW5: Y U I O P: ' +str_row6 asciiz 'ROW6: H J K L ^: ' +str_row7 asciiz 'ROW7: B N M ] \: ' + include glyphs.inc + include logo.inc