Difference between revisions of "Sega MegaDrive"

From SizeCoding
Jump to: navigation, search
(Created page with "== SEGA MegaDrive / Genesis == The Sinclair QL (for Quantum Leap) is a personal computer launched by Sinclair Research in 1984, as an upper-end counterpart to the ZX Spectrum....")
 
Line 7: Line 7:
 
* Assembler: VASM
 
* Assembler: VASM
 
* Emulator(s): BlastEm ( https://www.retrodev.com/blastem/ )
 
* Emulator(s): BlastEm ( https://www.retrodev.com/blastem/ )
* Tool(s): Various ROM Tools
+
* Tool(s): MDTools ( https://github.com/sikthehedgehog/mdtools )
 
* Hardware: Sega MegaDrive / Genesis console with a way to access ROM files.
 
* Hardware: Sega MegaDrive / Genesis console with a way to access ROM files.
  
 
The real hardware and BlastEm emulator don't require exact ROM headers, but you might want to distribute an emulator friendly version of your production as well for broader emulator compatibility.
 
The real hardware and BlastEm emulator don't require exact ROM headers, but you might want to distribute an emulator friendly version of your production as well for broader emulator compatibility.
  
=== Header ===
+
=== CPU Vector table ===
To load content from a folder or MDV image, you need both the binary and a basic loader, similar to platforms like the ZX Spectrum and CPC, Now copy your intro code as CODE into the same output folder and Q-Emulator should be able to pick everything up automatically and load the code. You can link the folder directly from the Q-emulator or generate a MDV image using mdvtool for distribution.
+
This must be the very first thing in the ROM, since the CPU reads it from 0x0000 on bootup.
 +
The Vector table is a table of addresses that the CPU needs to know about - things like stack address, "main()" function address,
 +
vertical/horizontal interrupt addresses, etc.
 +
For any interrupts we don't want to handle, we specify INT_Null (an interrupt at the bottom of the file that doesn't do anything).
 +
 
 +
<syntaxhighlight lang="">
 +
        dc.l  0x00FFE000 ; Initial stack pointer value
 +
dc.l  CPU_EntryPoint ; Start of program
 +
dc.l  CPU_Exception ; Bus error
 +
dc.l  CPU_Exception ; Address error
 +
dc.l  CPU_Exception ; Illegal instruction
 +
dc.l  CPU_Exception ; Division by zero
 +
dc.l  CPU_Exception ; CHK CPU_Exception
 +
dc.l  CPU_Exception ; TRAPV CPU_Exception
 +
dc.l  CPU_Exception ; Privilege violation
 +
dc.l  INT_Null ; TRACE exception
 +
dc.l  INT_Null ; Line-A emulator
 +
dc.l  INT_Null ; Line-F emulator
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Spurious exception
 +
dc.l  INT_Null ; IRQ level 1
 +
dc.l  INT_Null ; IRQ level 2
 +
dc.l  INT_Null ; IRQ level 3
 +
dc.l  INT_HInterrupt ; IRQ level 4 (horizontal retrace interrupt)
 +
dc.l  INT_Null  ; IRQ level 5
 +
dc.l  INT_VInterrupt ; IRQ level 6 (vertical retrace interrupt)
 +
dc.l  INT_Null ; IRQ level 7
 +
dc.l  INT_Null ; TRAP #00 exception
 +
dc.l  INT_Null ; TRAP #01 exception
 +
dc.l  INT_Null ; TRAP #02 exception
 +
dc.l  INT_Null ; TRAP #03 exception
 +
dc.l  INT_Null ; TRAP #04 exception
 +
dc.l  INT_Null ; TRAP #05 exception
 +
dc.l  INT_Null ; TRAP #06 exception
 +
dc.l  INT_Null ; TRAP #07 exception
 +
dc.l  INT_Null ; TRAP #08 exception
 +
dc.l  INT_Null ; TRAP #09 exception
 +
dc.l  INT_Null ; TRAP #10 exception
 +
dc.l  INT_Null ; TRAP #11 exception
 +
dc.l  INT_Null ; TRAP #12 exception
 +
dc.l  INT_Null ; TRAP #13 exception
 +
dc.l  INT_Null ; TRAP #14 exception
 +
dc.l  INT_Null ; TRAP #15 exception
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
dc.l  INT_Null ; Unused (reserved)
 +
</syntaxhighlight>
 +
 
 +
=== ROM Header ===
 +
Further header information at: https://plutiedev.com/rom-header
  
 
=== Memory map ===
 
=== Memory map ===

Revision as of 16:20, 18 December 2025

SEGA MegaDrive / Genesis

The Sinclair QL (for Quantum Leap) is a personal computer launched by Sinclair Research in 1984, as an upper-end counterpart to the ZX Spectrum. It was aimed at the serious home user and professional and executive users markets from small to medium-sized businesses and higher educational establishments, but failed to achieve commercial success. The Sinclair QL uses a Motorola 68008.CPU with 32-bit internal data registers, but an 8-bit external data bus.

Setting up

The real hardware and BlastEm emulator don't require exact ROM headers, but you might want to distribute an emulator friendly version of your production as well for broader emulator compatibility.

CPU Vector table

This must be the very first thing in the ROM, since the CPU reads it from 0x0000 on bootup. The Vector table is a table of addresses that the CPU needs to know about - things like stack address, "main()" function address, vertical/horizontal interrupt addresses, etc. For any interrupts we don't want to handle, we specify INT_Null (an interrupt at the bottom of the file that doesn't do anything).

        dc.l   0x00FFE000			; Initial stack pointer value
	dc.l   CPU_EntryPoint		; Start of program
	dc.l   CPU_Exception 		; Bus error
	dc.l   CPU_Exception 		; Address error
	dc.l   CPU_Exception 		; Illegal instruction
	dc.l   CPU_Exception 		; Division by zero
	dc.l   CPU_Exception 		; CHK CPU_Exception
	dc.l   CPU_Exception 		; TRAPV CPU_Exception
	dc.l   CPU_Exception 		; Privilege violation
	dc.l   INT_Null				; TRACE exception
	dc.l   INT_Null				; Line-A emulator
	dc.l   INT_Null				; Line-F emulator
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Spurious exception
	dc.l   INT_Null				; IRQ level 1
	dc.l   INT_Null				; IRQ level 2
	dc.l   INT_Null				; IRQ level 3
	dc.l   INT_HInterrupt		; IRQ level 4 (horizontal retrace interrupt)
	dc.l   INT_Null  			; IRQ level 5
	dc.l   INT_VInterrupt		; IRQ level 6 (vertical retrace interrupt)
	dc.l   INT_Null				; IRQ level 7
	dc.l   INT_Null				; TRAP #00 exception
	dc.l   INT_Null				; TRAP #01 exception
	dc.l   INT_Null				; TRAP #02 exception
	dc.l   INT_Null				; TRAP #03 exception
	dc.l   INT_Null				; TRAP #04 exception
	dc.l   INT_Null				; TRAP #05 exception
	dc.l   INT_Null				; TRAP #06 exception
	dc.l   INT_Null				; TRAP #07 exception
	dc.l   INT_Null				; TRAP #08 exception
	dc.l   INT_Null				; TRAP #09 exception
	dc.l   INT_Null				; TRAP #10 exception
	dc.l   INT_Null				; TRAP #11 exception
	dc.l   INT_Null				; TRAP #12 exception
	dc.l   INT_Null				; TRAP #13 exception
	dc.l   INT_Null				; TRAP #14 exception
	dc.l   INT_Null				; TRAP #15 exception
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)
	dc.l   INT_Null				; Unused (reserved)

ROM Header

Further header information at: https://plutiedev.com/rom-header

Memory map

Video display

To be added.

VDP

To be added.

 to be added

Sprites

To be added

; to be added

Sound

To be added.

; to be added

Additional Resources