From 0021a95a3d4a7e5ed04da043d8503fe39f142067 Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Mon, 10 Feb 2020 03:05:13 +0200 Subject: [PATCH] renamed to zxkeybtest --- Makefile | 4 +- testrom.asm | 303 -------------------------------------------------------- zxkeybtest.asm | 303 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 305 insertions(+), 305 deletions(-) delete mode 100644 testrom.asm create mode 100644 zxkeybtest.asm diff --git a/Makefile b/Makefile index 8e85c12..eefd9a0 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -name = testrom +name = zxkeybtest src = $(wildcard *.asm) obj = $(src:.asm=.o) bin = $(name).bin @@ -31,7 +31,7 @@ $(tap): $(bin) %.o: %.asm $(AS) -o $@ $(ASFLAGS) -L $*.lst $< >/dev/null -testrom.o: testrom.asm glyphs.inc logo.inc +zxkeybtest.o: zxkeybtest.asm glyphs.inc logo.inc .PHONY: clean clean: 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 diff --git a/zxkeybtest.asm b/zxkeybtest.asm new file mode 100644 index 0000000..55d1bfe --- /dev/null +++ b/zxkeybtest.asm @@ -0,0 +1,303 @@ +; 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 -- 1.7.10.4