Drawboard: ld hl, Board call drawboard2 jp drawboard3 Drawboard2: ld b, 64 ld de, 0 dboardloop: push bc push hl push de ld a, (hl) call getdatastart call GridPutSprite pop de inc e ld a, e cp 8 jr nz, noresetnextrow ld e, b inc d noresetnextrow: pop hl inc hl pop bc djnz dboardloop ld hl, $ca08 ld a, 128 ld b, 64 ld de, 16 drawvlineloop: ld (hl), a add hl, de djnz drawvlineloop ret drawboard3: ld hl, nodesstring ld de, $3843 call drawstring ld hl, movesstring ld de, $3143 call drawstring ld hl, (moves) ld de, $316a call PrintNumber ld hl, Wscorestring ld de, $2043 call drawstring ld de, $206a ld a, (whitescore) ld l, a ld h, 0 call PrintNumber ld hl, Bscorestring ld de, $2743 call drawstring ld de, $276a ld a, (blackscore) ld l, a ld h, 0 call PrintNumber ld de, $0043 ld hl, ShellTitle call drawstring ld de, $0643 ld hl, Author1 call drawstring ld a, (curturn) or a call z, whiteturn cp 1 call z, blackturn ret getdatastart: cp 7 jr c, getgraphic call changemeout ld hl, tempmem ret getgraphic: add a, a add a, a add a, a add a, a ld l, a ld h, 0 ld bc, Gfxset3 ld a, (graphics) cp 1 jr z, setgfx ld bc, Gfxset2 cp 2 jr z, setgfx ld bc, Gfxset1 setgfx: add hl, bc ret changemeout: push de ; make black stuff l grey! get d gfx, AND it with light (finds black), then XOR that with d gfx. sub 6 call getgraphic ld de, tempmem push de ld bc, 16 ldir ld b, 8 ld de, tempmem+8 pop hl ggfxloop: ld c, (hl) ld a, (de) and c xor (hl) ld (hl), a inc de inc hl djnz ggfxloop pop de ret GridPutSprite: push hl pop ix srl d rra and $80 or e ld e,a push de ld hl,$fc00 add hl,de ld b,8 ld de,16 GPS_Loop: ld a,(ix + 0) ld (hl),a inc ix add hl,de djnz GPS_Loop ld hl,$ca00 pop de add hl, de ld b, 8 ld de, 16 GPS_Loop2: ld a,(ix + 0) ld (hl),a inc ix add hl,de djnz GPS_Loop2 ret keyloop: xor a ;most of games processing goes here, because it doubles as a null loop ld (keyvar), a ld (keycounter), a keyloopb: ld c, b ld b, 50 keyloop2: ld a,%1111110 out (1),a nop in a,(1) ld e, 1 rra call nc,ldkey inc e rra call nc,ldkey inc e rra call nc,ldkey inc e rra call nc,ldkey inc e ld a,%00111111 out (1), a nop in a, (1) and %01000000 call z, ldkey inc e in a, (1) and %00100000 call z, ldkey inc e ld a,%01111101 out (1), a nop in a, (1) ld l, a and %00000010 call z, ldkey inc e ld a, l and %00000100 call z, ldkey inc e ld a,%01011111 out (1), a nop in a,(1) and %10000000 call z, ldkey djnz keyloop2 ld b, c djnz keyloopb ld a, (keyvar) ret ldkey: ld d, a ld a, e ld (keyvar), a ld a, (keycounter) cp 30 jr z, staykey inc a ld (keycounter), a xor a ld (keyvar), a staykey: ld a, d ret ; keys: ; 1=down ; 2=left ; 3=right ; 4=up ; 5=exit ; 6=2nd ; 7=plus ; 8=minus ; 9=alpha keycounter: .db 0 keyvar: .db 0 waitkey: ld b, 1 call keyloop or a jr nz, waitkey ret pause: call waitkey pause3: ld b, 1 call keyloop cp 6 jr nz, pause3 jp waitkey getkey: ld b, 1 call keyloop or a jr z, getkey push af call waitkey pop af ld (keyvar), a ret selectpiece: call drawselector call getboardpos ;we're gonna display the piece type! ld a, (de) cp 7 jr c, nosub6 sub 6 nosub6 ld hl, piecetxt-1 ld de, $1068 inc a ld b, a ditemloop push bc ld b, 1 ld a, 0 cpir pop bc djnz ditemloop call drawstring call getkey call drawselector ld a, (keyvar) ld hl, selposx cp 2 call z, movehldown cp 3 call z, movehlup ld hl, selposy cp 4 call z, movehldown cp 1 call z, movehlup cp 5 jr z, exitme cp 9 jr z, nosaveexit cp 6 jr nz, selectpiece ret exitme: ld a, 255 ret nosaveexit: pop hl jp closegrey movehldown: ld a, (hl) or a ret z dec (hl) xor a ret movehlup: ld a, (hl) cp 7 jr z, nogoup inc (hl) nogoup: xor a ret drawselector: ld de, (selposx) srl d rra and $80 or e ld e,a ld hl, $ca00 add hl, de push hl ld hl, $fc00 add hl, de pop de ld b, 8 drawsellp: ld a, (hl) cpl ld (hl), a ld a, (de) cpl ld (de), a push hl ld hl, 16 add hl, de ex de, hl pop hl push de ld de, 16 add hl, de pop de djnz drawsellp ret getboardpos: ld a, (selposy) rlca rlca rlca ld b, a ld a, (selposx) add a, b ld e, a ld d, 0 ld hl, Board add hl, de ex de, hl ret drawstring: push de ld (_penCol), de call _vputs pop de ret ;Borrowed from Jezzball by Magnus Svedin PrintNumber: ;number to print in hl, (x,y) in de ld (_PenCol), de ld de, ScoreTxt+4 ;buffer to store ASCII in ld b, $05 ;number of digits to print PNStl1: call _divHLby10 ;call function to convert from number to digit add a, '0' ;convert digit to ASCII-number for digit ld (de), a ;store in ASCII-buffer dec de djnz PNStl1 ;loop 5 times ld hl, ScoreTxt ld b, $05 res 3, (iy+5) ;overwrite current screen with menu-texts jp _vputsn ;print it to screen ScoreTxt: .db 0,0,0,0,0 .end