Last active
April 25, 2023 20:35
-
-
Save tndata/95b14a32c10a01124ce64f81234715e0 to your computer and use it in GitHub Desktop.
Sega MegaDrive hardware development kit firmware source code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* v 1.0 * | |
* BOOT ROM source for * | |
* for SEGA MEGADRIVE * | |
* 1991 Synchron Assembly * | |
* https://ww.tn-data.se * | |
************************************** | |
*sram start FF0000 | |
_final: | |
ifd _final | |
dc.l $FFFE00 *Stack pointer | |
dc.l reset *Program start | |
org $80008 | |
ENDC | |
reset: | |
clr.w $c0000 | |
lea alive(pc),a0 | |
lop: move.b (a0)+,d0 | |
beq ut | |
bsr send_byte | |
bra lop | |
ut: | |
*wait for datapacket to be stored att $FF0000 | |
lea $ff0000,a5 | |
*get header | |
bsr receive_byte | |
cmp.b #$ea,d0 | |
beq.s .ok | |
.lopaw: move.w d0,$c0000 | |
addq.w #1,d0 | |
bra .lopaw | |
.ok: | |
*get len hi, lo | |
bsr receive_byte | |
moveq #0,d3 | |
move.b d0,d3 | |
lsl.w #8,d3 | |
bsr receive_byte | |
move.b d0,d3 | |
mlop: | |
bsr receive_byte | |
move.b d0,(a5)+ | |
dbra d3,mlop | |
move.w #"G",d0 | |
bsr send_byte | |
move.w #"O",d0 | |
bsr send_byte | |
jmp $ff0000 | |
alive: dc.b "OK , I am alive, so what do do now!",0 | |
even | |
************************************************* | |
*Send byte to Atari ST | |
*D0=char | |
send_byte: | |
and.w #255,d0 | |
bset #8,d0 *Set strobe | |
move.w d0,$c0000 | |
*wait for Ack high | |
.no: move.w $c0000,d1 | |
btst #8,d1 | |
beq.s .no | |
*Clear strobe | |
and.w #255,d0 | |
move.w d0,$c0000 | |
*wait for Ack low | |
.no1: move.w $c0000,d1 | |
btst #8,d1 | |
bne.s .no1 | |
rts | |
************************************************* | |
*Wait for a byte from the ST, returns in d0 | |
receive_byte: | |
mulu d1,d1 | |
*wait for strobe high | |
.no: move.w $c0000,d1 | |
btst #9,d1 | |
beq.s .no | |
mulu d1,d1 | |
move.w $c0000,d0 | |
and.w #255,d0 | |
*set ack high | |
moveq #0,d1 | |
bset #9,d1 | |
move.w d1,$c0000 | |
mulu d1,d1 | |
*wait for strobe low | |
.no1: move.w $c0000,d1 | |
btst #9,d1 | |
bne.s .no1 | |
mulu d1,d1 | |
*set ack low | |
moveq #0,d1 | |
move.w d1,$c0000 | |
rts | |
************************************************* | |
dc.l -1,-1 | |
end | |
send data | |
* sega st | |
* | |
* write data | |
* wait for strobe | |
* set strobe high | |
* | |
* wait for ack | |
* set ack high | |
* | |
* wait for strobe low | |
* strobe low | |
* set ack low | |
* wait for ack low | |
* | |
*$c0000 | |
*rw 0-7 data | |
*w 8 Send strobe from Sega To ST | |
*r 8 Send ack from ST to sega to ack sended byte | |
*w 9 recieve ack from Sega to ST | |
*r 9 Send strobe from ST to Sega | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment