; vi:filetype=z80: section code,"c" include defs.inc main: call init ld hl, FB_ADDR + 25 call draw_logo call drawbg .mainloop: 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 include glyphs.inc include logo.inc include tiles.inc