X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=zxkeybtest;a=blobdiff_plain;f=testrom.asm;fp=testrom.asm;h=0000000000000000000000000000000000000000;hp=55d1bfe3eae262b91b02913fd0e635d88d9b2d38;hb=0021a95a3d4a7e5ed04da043d8503fe39f142067;hpb=4ecc5df01ba5c77c1aa89429ae93fc4facb4c98f diff --git a/testrom.asm b/testrom.asm deleted file mode 100644 index 55d1bfe..0000000 --- a/testrom.asm +++ /dev/null @@ -1,303 +0,0 @@ -; vi:filetype=z80: -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 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 a, $47 - ld b, 24 -.attry: ld c, 32 -.attrx: ld (hl), a - inc hl - dec c - jr nz, .attrx - dec b - jr nz, .attry - - ; clear screen - ld hl, FB_ADDR - xor a - ld b, 192 -.clry: ld c, 32 -.clrx: ld (hl), a - inc hl - dec c - jr nz, .clrx - dec b - jr nz, .clry - - ; set border - out (ULA_PORT), a - - ret - -; expects X -> c, Y -> b, returns in de -calc_cell_addr: - push af - sla b - sla b ; change from blocks to pixels - sla b - ; construct low address byte -> e - ld a, b ; start with Y - sla a - sla a - and $e0 ; keep top 3 bits - ld e, a ; move into e - ld a, c ; a <- X - and $1f ; keep low 5 bits - or e ; combine with Y bits - ld e, a ; move the result back to e - ; construct high address byte -> d - ld a, b ; start with Y again - sra a - sra a - sra a - and $18 ; keep bits 3 and 4 - ld d, a ; keep it in d - 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 - 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: - ; 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 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 - add hl, bc - ld c, 8 -.chartop: - ld a, (hl) - ld (de), a - inc d - 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