renamed to zxkeybtest v1.0
authorJohn Tsiombikas <nuclear@member.fsf.org>
Mon, 10 Feb 2020 01:05:13 +0000 (03:05 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Mon, 10 Feb 2020 01:05:13 +0000 (03:05 +0200)
Makefile
testrom.asm [deleted file]
zxkeybtest.asm [new file with mode: 0644]

index 8e85c12..eefd9a0 100644 (file)
--- 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 (file)
index 55d1bfe..0000000
+++ /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 (file)
index 0000000..55d1bfe
--- /dev/null
@@ -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