X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/298e8085b4f8f70121204fa4aed3a188034f6879..2bcaaabf0bbbb0232fe8ffe0a8943a14159852ab:/xm.asm diff --git a/xm.asm b/xm.asm new file mode 100644 index 0000000..d4b5374 --- /dev/null +++ b/xm.asm @@ -0,0 +1,88 @@ + SECTION "wee",HOME[$0] + ; this all needs to be PIC! +st: + ld sp, $CFFF + xor a + ld hl, $FF60 + ld [hli], a + ld [hli], a + ld [hli], a +nak: + ld a, $15 ; NAK + call putc+$FF80 + +.ack: call getc+$FF80 + cp $01 ;SOH + jr z,.soh + cp $04 ;EOT + jr z, .eot + cp $18 ;CAN + jr z, .rst + jr .donak + +.eot: + ld A, $06 ; Ack the EOT + call putc+$FF80 +.rst: rst $00 + +.soh: call getc+$FF80 ; blk + call getc+$FF80 ; iblk + xor a + ld b, a + ld l, a + ld h, $C0 +.lp: call getc+$FF80 + ld [hli], a + add b + ld b, a + bit 7, l + jr z, .lp +.cksm: call getc+$FF80 + cp b + jr nz, .donak + ld hl, $C000 +.lp2: jr z, .doack + ld a, [hli] + ld [$FF63], A + bit 7, l + jr z,.lp2 +.doack: ld A, $06 + call putc+$FF80 + jr .ack +.donak: call getc+$FF80 ; Wait until the line clears, and then once + jr .donak ; that happens, getc will cause a NAK. + +getc: + xor d + xor e +.dgetc: + dec de + xor a + cp d + jr z, .timeout + ld a, [$FF53] + and $02 + jr z, .dgetc + ld a, [$FF52] + ret +.timeout: + ld hl, $D000 + ld a, [hl] + inc a + ld [hl], a + ld [$FF51], a + jr nak + +putc: + ld c, $53 + push af +.waitport: + ld a,[c] + and $01 + jr nz,.waitport + pop af + ld [$FF52],a + ret + + section "a", HOME[$7F] + nop \ No newline at end of file