Has this brought up anything new you could discuss with us? Feels great to see you comment on the thread, BTW. On that note, since I already mentioned this elsewhere, I guess I'll type out the one experience with the Sega Channel I had as a child. I believe it was the 1995 (or 1996, but the former's more likely) Doylestown Arts Festival, strangely enough. The only store remotely connected to video games there is the Cyborg One comic book shop. But there, in the middle of the street, was a white cabinet - a Sega Channel Kiosk. I specifically remember seeing the menus in the Toejam-and-Earl style and playing "The Punisher" on the thing (with a time-reset condition similar to most Kiosks), and thinking it was the coolest thing ever, but because at the time I didn't live in Doylestown at the time (I was in Philly), I couldn't subscribe. This experience probably impacted much of how my nerddom's developed up to this point. I've been hoping that, someday, among the ROM dumps for Sega Channel circulating recently, will come the data that was in that Kiosk, complete with the ability to play various game demos. (Totally forgot if I brought this up before here.)
Is there a mirror of the Demo #4 ROM - LocalH's link from 2009 which was plastered all over the net at the time has since expired.
Teh ROM I do believe the ROM is also intergrated into the No-Intro sets as "Sega Channel Demo (USA) (Program).md"
No-Intro normally has higher standards than that, honestly. I think part of the reason for the sloppy name is related to their internal confusion over whether they want to handle "network" content like Sega Channel and Satellaview. (It also probably doesn't help that there wasn't a different demo up to this point - now... there are.)
There's a lot of left over DOS, C, and assembler trash inside both of the Sega Channel roms: Code (Text): ******************************************************************************** * Project: Generations Lost * * Module: vectors.s * * Creation Date: July 1993 * * Author: R. Frericks Jr. * * Development System: Sierra Systems 68000 Macro Assembler 3.0 * * * * Copyright (c)1993 Tengen Inc., Pacific SoftScape Inc. * ******************************************************************************** nolist include genesis.I list INITSTACK equ $ff8000 ; Inital system stack pointer * * First $100 bytes of the 68000 ROM space. * dc.l INITSTACK ; Reset: Initial stack pointer dc.l ICD_BLK4 ; Reset: Initial program counter dc.l _BusError ; Bus Error exception dc.l _AddressError ; Addr Error execption dc.l _StandardError ; Illegal Instruction execption dc.l _StandardError ; Zero Divide execption dcb.l 25-6+1,_StandardError ; Autovectors 6 through 25 dc.l _ExternalInt ; Level 2 Interrupt dc.l _StandardError ; Level 3 Interrupt dc.l _HorizontalInt ; Level 4 Interrupt dc.l _StandardError ; Level 5 Interrupt dc.l _VerticalInt ; Level 6 Interrupt dc.l _StandardError ; Level 7 Interrupt dc.l _NoVRAMerror ; Trap 0 dc.l _NoSATerror ; Trap 1 dc.l _NoObjectsError ; Trap 2 dcb.l 63-35+1,_StandardError ; Autovectors 35 through 63 Code (Text): .opt proc=68000 .file "..\c\header.c" .def BYTE\ .scl 13\ .type 0xc\ .endef .def WORD\ .scl 13\ .type 0xd\ .endef .def DWORD\ .scl 13\ .type 0xf\ .endef .def tagGENESIS_HEADER\ .scl 10\ .type 0x8\ .size 256\ .endef .def System\ .val 0\ .scl 8\ .type 0x32\ .line 23\ .size 16\ .dim 16\ .endef .def ReleaseYearMonth\ .val 16\ .scl 8\ .type 0x32\ .line 24\ .size 16\ .dim 16\ .endef .def GameNameDomestic\ .val 32\ .scl 8\ .type 0x32\ .line 25\ .size 48\ .dim 48\ .endef .def GameNameOverseas\ .val 80\ .scl 8\ .type 0x32\ .line 26\ .size 48\ .dim 48\ .endef .def ProductNumVersion\ .val 128\ .scl 8\ .type 0x32\ .line 27\ .size 14\ .dim 14\ .endef .def CheckSum\ .val 142\ .scl 8\ .type 0xd\ .endef .def IOusage\ .val 144\ .scl 8\ .type 0x32\ .line 29\ .size 16\ .dim 16\ .endef .def RomStart\ .val 160\ .scl 8\ .type 0xf\ .endef .def RomEnd\ .val 164\ .scl 8\ .type 0xf\ .endef .def RamStart\ .val 168\ .scl 8\ .type 0xf\ .endef .def RamEnd\ .val 172\ .scl 8\ .type 0xf\ .endef .def ExternalRam\ .val 176\ .scl 8\ .type 0x32\ .line 32\ .size 12\ .dim 12\ .endef .def ModemData\ .val 188\ .scl 8\ .type 0x32\ .line 33\ .size 12\ .dim 12\ .endef .def Memo\ .val 200\ .scl 8\ .type 0x32\ .line 34\ .size 40\ .dim 40\ .endef .def Country\ .val 240\ .scl 8\ .type 0x32\ .line 35\ .size 16\ .dim 16\ .endef .def .eos\ .val 256\ .scl 102\ .size 256\ .tag tagGENESIS_HEADER\ .endef .def GENESIS_HEADER\ .scl 13\ .type 0x8\ .size 256\ .tag tagGENESIS_HEADER\ .endef .def tagINIT_REGISTERS\ .scl 10\ .type 0x8\ .size 15\ .endef .def ModeSet1\ .val 0\ .scl 8\ .type 0xc\ .endef .def ModeSet2\ .val 1\ .scl 8\ .type 0xc\ .endef .def PatternBaseAddrA\ .val 2\ .scl 8\ .type 0xc\ .endef .def PatternBaseAddrW\ .val 3\ .scl 8\ .type 0xc\ .endef .def PatternBaseAddrB\ .val 4\ .scl 8\ .type 0xc\ .endef .def SatBaseAddr\ .val 5\ .scl 8\ .type 0xc\ .endef .def BkColor\ .val 6\ .scl 8\ .type 0xc\ .endef .def HInt\ .val 7\ .scl 8\ .type 0xc\ .endef .def ModeSet3\ .val 8\ .scl 8\ .type 0xc\ .endef .def ModeSet4\ .val 9\ .scl 8\ .type 0xc\ .endef .def HScrollAddr\ .val 10\ .scl 8\ .type 0xc\ .endef .def AutoIncrement\ .val 11\ .scl 8\ .type 0xc\ .endef .def ScrollSize\ .val 12\ .scl 8\ .type 0xc\ .endef .def WindowHpos\ .val 13\ .scl 8\ .type 0xc\ .endef .def WindowVpos\ .val 14\ .scl 8\ .type 0xc\ .endef .def .eos\ .val 15\ .scl 102\ .size 15\ .tag tagINIT_REGISTERS\ .endef .def INIT_REGISTERS\ .scl 13\ .type 0x8\ .size 15\ .tag tagINIT_REGISTERS\ .endef .text .align 2 .globl _header _header: .byte "SEGA GENESIS\0" .space 3 .byte "(C)T-XX 1994.JAN" .byte "Sega Channel \0" .space 31 .byte "Sega Channel \0" .space 31 .byte "GM T-000000 00" .word 0x0 .byte "J\0" .space 14 .long 0x0 .long 0xfffff .long 0xff0000 .long 0xffffff .byte "\0" .space 11 .byte "\0" .space 11 .byte "Developed by Pacific SoftScape Inc.\0" .space 4 .byte "JUE\0" .space 12 .def _header\ .val _header\ .scl 2\ .type 0x8\ .size 256\ .tag tagGENESIS_HEADER\ .endef Code (Text): AboutBox: Sierra Systems ASM68 3.00 globals.s 11/14/93 13:44 Page 1 1 T .opt proc=68000 2 T .file "..\c\globals.c" 3 T .def size_t\ .scl 13\ .type 0xf\ .endef 4 T .def va_list\ .scl 13\ .type 0x12\ .endef 5 T .def _iobuf\ .scl 10\ .type 0x8\ .size 28\ .endef 6 T .def ptr\ .val 0\ .scl 8\ .type 0x12\ .endef 7 T .def base\ .val 4\ .scl 8\ .type 0x12\ .endef 8 T .def cnt\ .val 8\ .scl 8\ .type 0x4\ .endef 9 T .def fd\ .val 12\ .scl 8\ .type 0x4\ .endef 10 T .def bufsize\ .val 16\ .scl 8\ .type 0x4\ .endef 11 T .def save_cnt\ .val 20\ .scl 8\ .type 0x4\ .endef 12 T .def flags\ .val 24\ .scl 8\ .type 0x3\ .endef 13 T .def ungch\ .val 26\ .scl 8\ .type 0x2\ .endef 14 T .def .eos\ .val 28\ .scl 102\ .size 28\ .tag _iobuf\ .endef 15 T .def FILE\ .scl 13\ .type 0x8\ .size 28\ .tag _iobuf\ .endef 16 T .def fpos_t\ .scl 13\ .type 0xf\ .endef 17 T .def BYTE\ .scl 13\ .type 0xc\ .endef 18 T .def WORD\ .scl 13\ .type 0xd\ .endef 19 T .def DWORD\ .scl 13\ .type 0xf\ .endef 20 T .def tagGENESIS_HEADER\ .scl 10\ .type 0x8\ .size 256\ .endef 21 T .def System\ .val 0\ .scl 8\ .type 0x32\ .line 23\ .size 16\ .dim 16\ .endef 22 T .def ReleaseYearMonth\ .val 16\ .scl 8\ .type 0x32\ .line 24\ .size 16\ .dim 16\ .endef 23 T .def GameNameDomestic\ .val 32\ .scl 8\ .type 0x32\ .line 25\ .size 48\ .dim 48\ .endef 24 T .def GameNameOverseas\ .val 80\ .scl 8\ .type 0x32\ .line 26\ .size 48\ .dim 48\ .endef 25 T .def ProductNumVersion\ .val 128\ .scl 8\ .type 0x32\ .line 27\ .size 14\ .dim 14\ .endef 26 T .def CheckSum\ .val 142\ .scl 8\ .type 0xd\ .endef 27 T .def IOusage\ .val 144\ .scl 8\ .type 0x32\ .line 29\ .size 16\ .dim 16\ .endef 28 T .def RomStart\ .val 160\ .scl 8\ .type 0xf\ .endef 29 T .def RomEnd\ .val 164\ .scl 8\ .type 0xf\ .endef 30 T .def RamStart\ .val 168\ .scl 8\ .type 0xf\ .endef 31 T .def RamEnd\ .val 172\ .scl 8\ .type 0xf\ .endef 32 T .def ExternalRam\ .val 176\ .scl 8\ .type 0x32\ .line 32\ .size 12\ .dim 12\ .endef 33 T .def ModemData\ .val 188\ .scl 8\ .type 0x32\ .line 33\ .size 12\ .dim 12\ .endef 34 T .def Memo\ .val 200\ .scl 8\ .type 0x32\ .line 34\ .size 40\ .dim 40\ .endef 35 T .def Country\ .val 240\ .scl 8\ .type 0x32\ .line 35\ .size 16\ .dim 16\ .endef 36 T .def .eos\ .val 256\ .scl 102\ .size 256\ .tag tagGENESIS_HEADER\ .endef 37 T .def GENESIS_HEADER\ .scl 13\ .type 0x8\ .size 256\ .tag tagGENESIS_HEADER\ .endef 38 T .def tagINIT_REGISTERS\ .scl 10\ .type 0x8\ .size 15\ .endef 39 T .def ModeSet1\ .val 0\ .scl 8\ .type 0xc\ .endef 40 T .def ModeSet2\ .val 1\ .scl 8\ .type 0xc\ .endef 41 T .def PatternBaseAddrA\ .val 2\ .scl 8\ .type 0xc\ .endef 42 T .def PatternBaseAddrW\ .val 3\ .scl 8\ .type 0xc\ .endef 43 T .def PatternBaseAddrB\ .val 4\ .scl 8\ .type 0xc\ .endef 44 T .def SatBaseAddr\ .val 5\ .scl 8\ .type 0xc\ .endef 45 T .def BkColor\ .val 6\ .scl 8\ .type 0xc\ .endef 46 T .def HInt\ .val 7\ .scl 8\ .type 0xc\ .endef 47 T .def ModeSet3\ .val 8\ .scl 8\ .type 0xc\ .endef 48 T .def ModeSet4\ .val 9\ .scl 8\ .type 0xc\ .endef 49 T .def HScrollAddr\ .val 10\ .scl 8\ .type 0xc\ .endef 50 T .def AutoIncrement\ .val 11\ .scl 8\ .type 0xc\ .endef 51 T .def ScrollSize\ .val 12\ .scl 8\ .type 0xc\ .endef 52 T .def WindowHpos\ .val 13\ .scl 8\ .type 0xc\ .endef 53 T .def WindowVpos\ .val 14\ .scl 8\ .type 0xc\ .endef 54 T .def .eos\ .val 15\ .scl 102\ .size 15\ .tag tagINIT_REGISTERS\ .endef 55 T .def INIT_REGISTERS\ .scl 13\ .type 0x8\ .size 15\ .tag tagINIT_REGISTERS\ .endef 56 T .def tagACTOR_DATA\ .scl 10\ .type 0x8\ .size 34\ .endef 57 T .def pCurrentFrame\ .val 0\ .scl 8\ .type 0x1d\ .endef 58 T .def pNextFrame\ .val 4\ .scl 8\ .type 0x1d\ .endef 59 T .def pRomData\ .val 8\ .scl 8\ .type 0x1d\ .endef 60 T .def Xpos\ .val 12\ .scl 8\ .type 0xd\ .endef 61 T .def Xfrac\ .val 14\ .scl 8\ .type 0xd\ .endef Sierra Systems ASM68 3.00 globals.s 11/14/93 13:44 Page 2 SECTION: .text 62 T .def Ypos\ .val 16\ .scl 8\ .type 0xd\ .endef 63 T .def Yfrac\ .val 18\ .scl 8\ .type 0xd\ .endef 64 T .def X1\ .val 20\ .scl 8\ .type 0xd\ .endef 65 T .def Y1\ .val 22\ .scl 8\ .type 0xd\ .endef 66 T .def X2\ .val 24\ .scl 8\ .type 0xd\ .endef 67 T .def Y2\ .val 26\ .scl 8\ .type 0xd\ .endef 68 T .def Flags\ .val 28\ .scl 8\ .type 0xc\ .endef 69 T .def InternalFlags\ .val 29\ .scl 8\ .type 0xc\ .endef 70 T .def Blank\ .val 30\ .scl 8\ .type 0xc\ .endef 71 T .def FrameCounter\ .val 31\ .scl 8\ .type 0xc\ .endef 72 T .def SATindex\ .val 32\ .scl 8\ .type 0xc\ .endef 73 T .def NumSAT\ .val 33\ .scl 8\ .type 0xc\ .endef 74 T .def .eos\ .val 34\ .scl 102\ .size 34\ .tag tagACTOR_DATA\ .endef 75 T .def ACTOR_DATA\ .scl 13\ .type 0x8\ .size 34\ .tag tagACTOR_DATA\ .endef 76 T .def tagHERO\ .scl 10\ .type 0x8\ .size 98\ .endef 77 T .def actor\ .val 0\ .scl 8\ .type 0x8\ .size 34\ .tag tagACTOR_DATA\ .endef 78 T .def pRomData\ .val 34\ .scl 8\ .type 0x1d\ .endef 79 T .def MessageFunction\ .val 38\ .scl 8\ .type 0x90\ .endef 80 T .def Health\ .val 42\ .scl 8\ .type 0xd\ .endef 81 T .def StateFunction\ .val 44\ .scl 8\ .type 0x90\ .endef 82 T .def Xvel\ .val 48\ .scl 8\ .type 0xd\ .endef 83 T .def Xfrac\ .val 50\ .scl 8\ .type 0xd\ .endef 84 T .def Xaccel\ .val 52\ .scl 8\ .type 0xd\ .endef 85 T .def Xafrac\ .val 54\ .scl 8\ .type 0xd\ .endef 86 T .def Xmax\ .val 56\ .scl 8\ .type 0xd\ .endef 87 T .def Xmfrac\ .val 58\ .scl 8\ .type 0xd\ .endef 88 T .def Yvel\ .val 60\ .scl 8\ .type 0xd\ .endef 89 T .def Yfrac\ .val 62\ .scl 8\ .type 0xd\ .endef 90 T .def Yaccel\ .val 64\ .scl 8\ .type 0xd\ .endef 91 T .def Yafrac\ .val 66\ .scl 8\ .type 0xd\ .endef 92 T .def Ymax\ .val 68\ .scl 8\ .type 0xd\ .endef 93 T .def Ymfrac\ .val 70\ .scl 8\ .type 0xd\ .endef 94 T .def param0\ .val 72\ .scl 8\ .type 0xd\ .endef 95 T .def param1\ .val 74\ .scl 8\ .type 0xd\ .endef 96 T .def param2\ .val 76\ .scl 8\ .type 0xd\ .endef 97 T .def param3\ .val 78\ .scl 8\ .type 0xd\ .endef 98 T .def param4\ .val 80\ .scl 8\ .type 0xd\ .endef 99 T .def param5\ .val 82\ .scl 8\ .type 0xd\ .endef 100 T .def Flags1\ .val 84\ .scl 8\ .type 0xc\ .endef 101 T .def Flags2\ .val 85\ .scl 8\ .type 0xc\ .endef 102 T .def NextState\ .val 86\ .scl 8\ .type 0xd\ .endef 103 T .def CurrentState\ .val 88\ .scl 8\ .type 0xd\ .endef 104 T .def pStateInfo\ .val 90\ .scl 8\ .type 0x1d\ .endef 105 T .def pPlatform\ .val 94\ .scl 8\ .type 0x10\ .endef 106 T .def .eos\ .val 98\ .scl 102\ .size 98\ .tag tagHERO\ .endef 107 T .def HERO\ .scl 13\ .type 0x8\ .size 98\ .tag tagHERO\ .endef 108 T .def tagOBJECT\ .scl 10\ .type 0x8\ .size 102\ .endef 109 T .def actor\ .val 0\ .scl 8\ .type 0x8\ .size 34\ .tag tagACTOR_DATA\ .endef 110 T .def pRomData\ .val 34\ .scl 8\ .type 0x1d\ .endef 111 T .def MessageFunction\ .val 38\ .scl 8\ .type 0x90\ .endef 112 T .def Health\ .val 42\ .scl 8\ .type 0xd\ .endef 113 T .def StateFunction\ .val 44\ .scl 8\ .type 0x90\ .endef 114 T .def Xvel\ .val 48\ .scl 8\ .type 0xd\ .endef 115 T .def Xfrac\ .val 50\ .scl 8\ .type 0xd\ .endef 116 T .def Xaccel\ .val 52\ .scl 8\ .type 0xd\ .endef 117 T .def Xafrac\ .val 54\ .scl 8\ .type 0xd\ .endef 118 T .def Xmax\ .val 56\ .scl 8\ .type 0xd\ .endef 119 T .def Xmfrac\ .val 58\ .scl 8\ .type 0xd\ .endef 120 T .def Yvel\ .val 60\ .scl 8\ .type 0xd\ .endef 121 T .def Yfrac\ .val 62\ .scl 8\ .type 0xd\ .endef Sierra Systems ASM68 3.00 globals.s 11/14/93 13:44 Page 3 SECTION: .text 122 T .def Yaccel\ .val 64\ .scl 8\ .type 0xd\ .endef 123 T .def Yafrac\ .val 66\ .scl 8\ .type 0xd\ .endef 124 T .def Ymax\ .val 68\ .scl 8\ .type 0xd\ .endef 125 T .def Ymfrac\ .val 70\ .scl 8\ .type 0xd\ .endef 126 T .def param0\ .val 72\ .scl 8\ .type 0xd\ .endef 127 T .def param1\ .val 74\ .scl 8\ .type 0xd\ .endef 128 T .def param2\ .val 76\ .scl 8\ .type 0xd\ .endef 129 T .def param3\ .val 78\ .scl 8\ .type 0xd\ .endef 130 T .def param4\ .val 80\ .scl 8\ .type 0xd\ .endef 131 T .def param5\ .val 82\ .scl 8\ .type 0xd\ .endef 132 T .def Flags1\ .val 84\ .scl 8\ .type 0xc\ .endef 133 T .def Flags2\ .val 85\ .scl 8\ .type 0xc\ .endef 134 T .def NextState\ .val 86\ .scl 8\ .type 0xd\ .endef 135 T .def CurrentState\ .val 88\ .scl 8\ .type 0xd\ .endef 136 T .def pStateInfo\ .val 90\ .scl 8\ .type 0x1d\ .endef 137 T .def pPlatform\ .val 94\ .scl 8\ .type 0x10\ .endef 138 T .def PrevObject\ .val 98\ .scl 8\ .type 0xd\ .endef 139 T .def NextObject\ .val 100\ .scl 8\ .type 0xd\ .endef 140 T .def .eos\ .val 102\ .scl 102\ .size 102\ .tag tagOBJECT\ .endef 141 T .def OBJECT\ .scl 13\ .type 0x8\ .size 102\ .tag tagOBJECT\ .endef 142 T .text SECTION: .text 143 T .globl _ResetRegisters 144 T 00000000 _ResetRegisters: 145 T 00000000 06 .byte 0x6 146 T 00000001 64 .byte 0x64 147 T 00000002 30 .byte 0x30 148 T 00000003 30 .byte 0x30 149 T 00000004 07 .byte 0x7 150 T 00000005 5e .byte 0x5e 151 T 00000006 00 .byte 0x0 152 T 00000007 00 .byte 0x0 153 T 00000008 08 .byte 0x8 154 T 00000009 81 .byte 0x81 155 T 0000000a 00 .byte 0x0 156 T 0000000b 02 .byte 0x2 157 T 0000000c 11 .byte 0x11 158 T 0000000d 00 .byte 0x0 159 T 0000000e 00 .byte 0x0 160 T .def _ResetRegisters\ .val _ResetRegisters\ .scl 2\ .type 0x8\ .size 15\ .tag tagINIT_REGISTERS\ .endef 161 T 0000000f .align 2 162 T .globl _Stub 163 T .def _Stub\ .val _Stub\ .scl 2\ .type 0x20\ .endef 164 T 00000010 _Stub: 165 T 00000010 4e56 fffc link a6,#-4 166 T 00000014 .ln 1 167 T .def .bf\ .val .\ .scl 101\ .line 56\ .endef 168 T .def .ef\ .val .\ .scl 101\ .line 57\ .endef 169 T 00000014 .ln 2 170 T 00000014 4e5e unlk a6 171 T 00000016 4e75 rts 172 T .def _Stub\ .val .\ .scl -1\ .endef 173 T .def _Hero\ .val _Hero\ .scl 2\ .type 0x8\ .size 98\ .tag tagHERO\ .endef 174 T .comm _Hero,98,2 175 T .def _object\ .val _object\ .scl 2\ .type 0x38\ .line 62\ .size 5100\ .tag tagOBJECT\ .dim 50\ .endef 176 T .comm _object,5100,2 177 T .def _WorldXpos\ .val _WorldXpos\ .scl 2\ .type 0xf\ .endef 178 T .comm _WorldXpos,4,2 179 T .def _WorldYpos\ .val _WorldYpos\ .scl 2\ .type 0xf\ .endef 180 T .comm _WorldYpos,4,2 Sierra Systems ASM68 3.00 globals.s 11/14/93 13:44 Page 4 SECTION: .text 181 T .def _MinWorldX\ .val _MinWorldX\ .scl 2\ .type 0xd\ .endef 182 T .comm _MinWorldX,2,2 183 T .def _MaxWorldX\ .val _MaxWorldX\ .scl 2\ .type 0xd\ .endef 184 T .comm _MaxWorldX,2,2 185 T .def _MinWorldY\ .val _MinWorldY\ .scl 2\ .type 0xd\ .endef 186 T .comm _MinWorldY,2,2 187 T .def _MaxWorldY\ .val _MaxWorldY\ .scl 2\ .type 0xd\ .endef 188 T .comm _MaxWorldY,2,2 189 T .def _CurrentSequence\ .val _CurrentSequence\ .scl 2\ .type 0xd\ .endef 190 T .comm _CurrentSequence,2,2 191 T .def _pSubmenu\ .val _pSubmenu\ .scl 2\ .type 0x10\ .endef 192 T .comm _pSubmenu,4,2 193 T .def _GameFlags\ .val _GameFlags\ .scl 2\ .type 0xd\ .endef 194 T .comm _GameFlags,2,2 195 T .def _BackdropRate\ .val _BackdropRate\ .scl 2\ .type 0xc\ .endef 196 T .comm _BackdropRate,1,1 Total Errors: 0 Total Warnings: 0 SYMBOL TABLE Value Section/Type Name 00000000 .text _ResetRegisters 00000010 .text _Stub UNDEFINED _P Code (Text): UNDEFINED _CurrentSequence UNDEFINED _GameFlags UNDEFINED _Hero UNDEFINED _MaxWorldX UNDEFINED _MaxWorldY UNDEFINED _MinWorldX UNDEFINED _MinWorldY UNDEFINED _WorldXpos UNDEFINED _WorldYpos UNDEFINED _object UNDEFINED _pSubmenu e 00000000 .text _ResetRegisters 00000010 .text _Stub UNDEFINED _ Code (Text): /**************************************************************************** * * * Project: SEGA CHANNEL * * * * Module: GLOBALS.C * * * * Module Creation Date: October 1993 * * * * Author: J. Fort * * * * Development System: Sierra C 3.0 * * * * Copyright (c)1993 Pacific SoftScape Inc. * * * ****************************************************************************/ #include <stdio.h> #include "genesis.h" #include "actor.h" #include "objeng.h" const INIT_REGISTERS ResetRegisters = { 0x06, /* ModeSet1: disable H int, stop H&V ctrs */ 0x64, /* ModeSet2: enable display, enable V int */ 0x30, /* PatternBaseAddrA: @ $C000 */ 0x30, /* PatternBaseAddrW: @ $C000 */ 0x07, /* PatternBaseAddrB: @ $e000 */ 0x5e, /* SatBaseAddr: @ $bc00 */ 0x00, /* BkColor: color zero */ 0x00, /* HInt: */ #ifdef _DEBUG 0x08, /* ModeSet3: enable ext int, full scroll */ #else 0x08, /* ModeSet3: full scroll */ #endif 0x81, /* ModeSet4: h 40 cell mode */ 0x00, /* HScrollAddr: @ $0000 */ 0x02, /* AutoIncrement: 2 */ 0x11, /* ScrollSize: 64 x 64 maps */ 0x00, /* WindowHpos: */ 0x00, /* WindowVpos: */ }; /*************************************************************************** FUNCTION: Stub -- do nothing DESCRIPTION: . RETURNS: . PARAMETERS: . SIDE EFFECTS: . REVISIONS: 10/93 -jf- ****************************************************************************/ void Stub(void) { } HERO Hero; OBJECT object[MAX_OBJECTS]; DWORD WorldXpos; /* 16:16 fixed point world position */ DWORD WorldYpos; /* 16:16 fixed point world position */ WORD MinWorldX,MaxWorldX; /* world X limits */ WORD MinWorldY,MaxWorldY; /* world Y limits */ WORD CurrentSequence; /* All purpose sequence counter */ void *pSubmenu; /* Pointer to submenu */ WORD GameFlags; /* Where ICON's get thier data from */ BYTE BackdropRate; /* Where we ALWAYS get our backdrop reload from */ Code (Text): * * * Project: Genesis CORE CODE * * * * Module: STDOUT.S * * * * Module Creation Date: October 1993 * * * * Author: J. Fort * * * * Development System: SIERRA SYSTEMS 3.0 * * * * Copyright (c)1993 Pacific SoftScape Inc * * * ***************************************************************************** * * Standard output and console routines. All output assumes MAPA and * 64x64 maps. Very little error checking, call with good data. * All positions are relative to the current window. * * nolist include genesis.I include actor.I include schannel.I list section .bss ** Current console I/O locations Row ds.w 1 Col ds.w 1 MinRow ds.w 1 MinCol ds.w 1 MaxRow ds.w 1 MaxCol ds.w 1 xdef FontOffset FontOffset ds.w 1 ; Character offset for font addr calculations DmaCount ds.w 1 ScrollDMA ds.w 8 ; 10 bytes for DMA setup ScrollDMA2 ds.w 8 ; Another 8 words BottomVRAM ds.l 1 ; Command to set vram address NumCol ds.w 1 ; # of columns DMA_SRCLO EQU 7 DMA_SRCHI EQU 9 DMA_DEST EQU 12 tsection .text xdef _SetFontPriPal,SetFontPriPal **************************************************************************** * DESCRIPTION: Sets up priority and palette fields for all subsequent * text output. Will be erased by a call to _SetupStdout * Can also setup the font to be flipped if desired. * RETURNS: . * PARAMETERS: WORD - genesis format pri/pal data. Will be ADDED to the * base font data. (D0 - SP+4) * SIDE EFFECTS: * REVISIONS: 10/93 -jf- **************************************************************************** _SetFontPriPal: move.w 4(sp),d0 SetFontPriPal: and.w #$07FF,FontOffset and.w #$F800,d0 or.w d0,FontOffset rts xdef SetTextPosition,_SetTextPosition **************************************************************************** * DESCRIPTION: Sets up the console position for all subsequent writes * RETURNS: . * PARAMETERS: SHORT xposition D0 SP+4 * SHORT yposition D1 SP+6 * SIDE EFFECTS: * REVISIONS: 10/93 -jf- **************************************************************************** _SetTextPosition: move.w 4(sp),d0 move.w 6(sp),d1 SetTextPosition: add.w MinRow,d1 cmp.w MaxRow,d1 ; JBE.s STP_1 move.w MinRow,d1 ; We're too big... STP_1: move.w d1,Row add.w MinCol,d0 ; Offset for minimuims cmp.w MaxCol,d0 JBE.s STP_2 move.w MinCol,d0 STP_2 move.w D0,Col rts xdef _SetTextWindow **************************************************************************** * DESCRIPTION: Sets up the extents of the text window for the STDOUT * functions. Also resets the origin of the window to 0,0 * Sets up the DMA's for the scroll * RETURNS: . * PARAMETERS: WORD UpperLeft X SP+4 * WORD UpperLeft Y SP+6 * WORD LowerRight X SP+8 * WORD LowerRight Y SP+10 * OR PASS A POINTER TO AN ARRAY LIKE ABOVE TO SetTextWindow * SIDE EFFECTS: * REVISIONS: 10/93 -jf- **************************************************************************** _SetTextWindow lea 4(sp),a0 SetTextWindow: move.w (a0)+,d0 move.w d0,Col move.w d0,MinCol ; D0 = MIN COL move.w (a0),Row move.w (a0)+,MinRow move.w (a0)+,d1 ; D1 = MAX COL move.w d1,MaxCol move.w (a0),MaxRow lea ScrollDMA,a1 SetVDPreg 1,$74,(a1)+ ; set up DMA enable sub.w d0,d1 ; # of columns move.w d1,NumCol ; Remember it lsl.w #1,d1 ; #2 = # of bytes CalcVDPreg 19,d1 move.w d1,(a1)+ ; set length low based on D1 SetVDPreg 20,0,(a1)+ ; set length high move.w Row,d1 lsl.w #6,d1 ; (Row*64+Col)*2 add.w Col,d1 ; lsl.w #1,d1 ; add.w #MAPA_VRAM,d1 ; D1 is now top-left VRAM address PUSH.w d1 ; Save it move.w d1,d0 add.w #128,d0 ; Next row down - source addr move.w d0,d2 CalcVDPreg 21,d2 move.w d2,(a1)+ ; Low Source Address lsr.w #8,d0 CalcVDPreg 22,d0 move.w d0,(a1)+ ; High Source Address SetVDPreg 23,$C0,(a1)+ ; Really high addr - set to C0 move.w d1,d0 ; Dest Addr and.w #$3FFF,d0 move.w d0,(a1)+ ; Source Addr 1 rol.w #2,d1 and.w #$0003,d1 or.w #$00C0,d1 move.w d1,(a1) ; DMA SETUP! move.w MaxRow,d0 sub.w MinRow,d0 DEC.w d0 move.w d0,DmaCount ; # of rows to DMA * * * INC.w d0 lsl.w #7,d0 ; # of rows * 128 add.w (sp)+,d0 ; And add in VRAM address of top-left CalcVRAMaddr d0,d1 ; Calculate it move.l d1,BottomVRAM rts xdef OutMultiText **************************************************************************** * DESCRIPTION: Outputs multiple text strings to multiple positios -- this * is a list of OutText format strings. Terminate this list with * an additional 0 * RETURNS: . * PARAMETERS: A0 - pointer to a list of many strings * SIDE EFFECTS: * REVISIONS: 10/93 -jf- **************************************************************************** OutMultiText: bsr.s OutPosText ; Display one string tst.b (a0) bne.s OutMultiText ; Keep outputing rts xdef OutPosText,_OutPosText xdef OutText,_OutText **************************************************************************** * DESCRIPTION: Displays text at a specific point on the screen -- This * point is indicated by 2 position BYTES immediately before * the string's text. OutText is the same, but the position is * whatever is current * RETURNS: A0 - pointing after the Null Terminator * PARAMETERS: poitnter to a structure, X pos byte, A0 SP+4 * Y pos byte, null-terminated string. * SIDE EFFECTS: * REVISIONS: 10/93 -jf- **************************************************************************** _OutText: move.l 4(sp),a0 bra.s OutText _OutPosText: move.l 4(sp),a0 OutPosText: PUSH.l A3 move.l a0,a3 clr.w d0 clr.w d1 move.b (a3)+,d0 ; Xpos move.b (a3)+,d1 ; Ypos! bsr SetTextPosition ; Set new position bra.s OT_1 OutText: PUSH.l a3 move.l a0,a3 OT_1: clr.w d0 move.b (a3)+,d0 beq.s OT_2 bsr putchx ; Display this character bra.s OT_1 OT_2: move.l a3,a0 POP.l a3 rts ; Done! xdef OutHexText **************************************************************************** * DESCRIPTION: Displays a hex WORD value as ASCII text -- This is simpler * than calling PRINTF for simple hex words * RETURNS: . * PARAMETERS: D0 - WORD to display * SIDE EFFECTS: * REVISIONS: 11/93 -jf- **************************************************************************** OutHexText: PUSH.W d4 PUSH.W d3 move.w d0,d4 move.w #4-1,d3 OHT_1 rol.w #4,d4 move.w d4,d0 and.w #$000F,d0 move.b HEXASCII(pc,d0),d0 bsr.s putchx dbra d3,OHT_1 POP.W d3 POP.W D4 rts HEXASCII dc.b '0123456789ABCDEF' xdef OutDecText **************************************************************************** * DESCRIPTION: Displays a decimal WORD value as ASCII text -- This is simpler * than calling PRINTF for simple decimal values * RETURNS: . * PARAMETERS: D0 - WORD to display * SIDE EFFECTS: * REVISIONS: 11/93 -jf- **************************************************************************** OutDecText: PUSHM.l d3-d4/a2 clr.l d3 clr.w d4 ; flag move.w d0,d3 lea DIVTABLE(pc),a2 ODT_1 move.w (a2)+,d1 beq.s ODT_X ; Done, leave divu.w d1,d3 ; Divide d3 by d0 move.w d3,d1 ; quotient move.b HEXASCII(pc,d1),d0 tst.b d1 bne.s ODT_3 tst.b d4 bne.s ODT_4 ; Need terminating zeros move.w #' ',d0 ; Spaces if not bra.s ODT_4 ODT_3 st.b d4 ODT_4 bsr.s putchx ; Display quotient clr.w d3 swap.w d3 ; And put remainder into d3 bra ODT_1 ODT_X: POPM.l d3-d4/a2 rts DIVTABLE dc.w 10000,1000,100,10,1,0 xdef _putchx xdef putchx ******************************************************************************** * DESCRIPTION: Stdout putch function for printf, etc. Puts the char to the * Genesis Map A, 40 column mode. * Translates a LF to CR-LF * PARAMETERS: int c - The character to put out. (D0, SP+4) * this is an INT -- so it's 32 bits long * RETURN VALUE: void * COMMENTS: * REVISIONS: 9/93 -rf- * 10/93 -jf- Updated ******************************************************************************** _putchx: move.w 6(sp),d0 ; Word optimized call putchx: cmp.b #10,d0 ; LF? bne.s PC_0 ; no, goto pc_0 add.w #1,Row ; if LF, Row++ bra.s PC_A ; do a CR too! PC_0: cmp.b #13,d0 bne.s PC_1 ; CR? no- goto PC_1 PC_A: move.w MinCol,Col ; if CR - Col=MinCol bra.s PC_X PC_1: move.w Row,d1 lsl.w #6,d1 ; (Row*64+Col)*2 add.w Col,d1 ; lsl.w #1,d1 ; add.w #MAPA_VRAM,d1 ; CalcVRAMaddr d1,d2 ; move.l d2,VCTRL ; Setup MAP VRAM address lea Ascii2Font-$20(pc),a0 ; Compensate for table beginning at space too move.b (a0,d0),d0 ; Get char # add.w FontOffset,d0 ; Add in font offset move.w d0,VDATA ; und write to video INC.w Col * * Simple wrap-around on the X -- but we scroll for the Y * PC_X: move.w Col,d0 cmp.w MaxCol,d0 JBE.s PC_X1 ; if (Col > MaxCol) move.w MinCol,Col ; Col=MinCol INC.w Row PC_X1: move.w Row,d0 cmp.w MaxRow,d0 JBE.s PC_X2 * * We want to scroll here! -- First, copy over the DMA command so we can mod it * lea ScrollDMA,a0 lea ScrollDMA2,a1 move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0),(a1) ; copied lea VCTRL,a0 SetAutoInc 1,(a0) move.l #ScrollDMA2,d2 ; Source move.l d2,a1 ; Load A1 move.w DmaCount,d0 ; Count PC_XA: move.l (a1)+,(a0) move.l (a1)+,(a0) move.l (a1)+,(a0) move.l (a1),(a0) ; Do a DMA move.l d2,a1 ; Reload pointer add.w #128,DMA_DEST(a1) add.b #128,DMA_SRCLO(a1) bcc.s PC_XB INC.b DMA_SRCHI(a1) PC_XB: move.w (a0),d1 btst.l #1,d1 bne.s PC_XB ; Wait for DMA dbra d0,PC_XA * * Done -- Gotta clear bottom line, we'll use the DMA that's already set up * SetVDPreg 1,$64,(a0) SetAutoInc 2,(a0) move.w NumCol,d0 move.w FontOffset,d1 and.w #$07FF,d1 ; All clears on P0! move.l BottomVRAM,(a0) sub.w #4,a0 PC_XC: move.w d1,(a0) dbra d0,PC_XC DEC.w Row ; Correct for being one past PC_X2: rts xdef _SetupStdout ******************************************************************************** * DESCRIPTION: Sets up the video for text output. Loads the font into VRAM * and resets the console parameters. The map will go into * MAPA * PARAMETERS: * * RETURN VALUE: . * COMMENTS: . * REVISIONS: 10/93 -jf- **********************
Tough question. I myself made the filename match the Cartridge "art" to the best of my ability, and wrote every detail (including the date written on the cart). Yes, the date was the same as the Demo #6 cart. I'm kinda I kept a picture of the demo 4 cart, though - I was sloppy in saving stuff and didn't have that in a space where I'd end up reobtaining it easily. Basically, though, the cartridge description's the most accurate thing we got for it.
M1 started life as a MAME-based music player for arcade games. Then it got forked/mirrored/edited/frontend-ed/etc. to oblivion. The only two versions I know still exist in active (somewhat) development are Richard Bannister's Mac OS X port and the one ValleyBell is talking about, which is basically M1 for MESS.
Actually I'm using Richard Bannister's version. The source code included makefiles for Windows, Linux and Mac OS X, so I just had to compile it for Windows. The nice thing on M1 is, that is has some generic support for the GEMS sound driver (and some SMPS Z80 versions, too, btw). But sorry, M1 doesn't play anything with the final Sega Channel ROM. Maybe it handles some versions of the GEMS driver incorrectly.
These are wonderful to see. I loved my Sega channel, so many memories. I really wish there were some way to revive the service or something. (or maybe a special sega channel theme of the retro channel? if I understand what the retro channel even is.) Anyone dump the Japanese Sega Channel yet? Or know if there is any difference between the tall and short adapters?
I haven't been able to use the Sega Channel ROMs with M1 in any way, since it requires adding offsets to the xml file. How are you guys doing it, what version, download link, etc.
M1 Windows version It's actually quite easy. My currrent m1.xml looks like this: (I wrote a completely new xml to speed up loading) [xml]<?xml version="1.0"?> <m1 version="1"> <game name="SEGA_CHANNEL_04" board="Sega Genesis/MegaDrive"> <description>Sega Channel Demo 4</description> <year>1994</year> <manufacturer>Sega</manufacturer> <m1data default="1" stop="0" min="1" max="32768"/> <region type="cpu1" size="4194304"> <rom name="Sega Channel Demo Cartridge #4 (2-16-94) (dumped by LocalH).bin" size="524288" crc="2ABAE889" offset="0"/> </region> </game> <game name="SegaChannel_Fix_Regen" board="Sega Genesis/MegaDrive"> <description>Sega Channel</description> <year>1994</year> <manufacturer>Sega</manufacturer> <m1data default="1" stop="0" min="1" max="32768"/> <region type="cpu1" size="4194304"> <rom name="SegaChannel_Fix_Regen.bin" size="262144" crc="70DCE5DA" offset="0"/> </region> </game> </m1>[/xml] The only important things are "game name" and the line with "rom name". game name must be the filename of the zip-file without .zip. The rom line contains info about the ROM: full filename, size and checksum (crc and sha are both possible, at least one checksum is needed to make M1 read the file). offset must be always 0 for console ROMs. Then run "m1 SEGA_CHANNEL_04" and it will play.
The two US Sega Channel BIOs carts are listed in the no-intro DAT as: Sega Channel (USA) (General Instrument) (Program).md Sega Channel (USA) (Scientific Atlanta) (Program).md The Japanese BIOs is still undumped. EDIT: I also just dug through the SC webpage on archive.org and found this section http://web.archive.org/web/19970327222115/http://www.sega.com/channel/now/9.html Would -each- of these have their own BIOs?
Hey, thanks. One has to wonder why nobody has already built a version that doesn't need to zip each binary, rename it and edit an XML file specifically for it... Os with SMS support, for that matter.
Hey guys, just doing a bump. This is for magazine scans. Over at the BS Zelda forums, user Madhatter digs through various old magazines for Satellaview stuff. A lot of the USA and Europe articles tend to have writings on both the Satellaview and Sega Channel on the same articles, so maybe there's stuff to spot if I share them with you guys. Edit: ALSO! The old urls are borked, so here's the files re-upped to my webspace. http://kiddocabbusses.tryhappy.net/SegaChannel/TAZ_MANIA.bin http://kiddocabbusses.tryhappy.net/SegaChannel/SEGA_CHANNEL_01.bin http://kiddocabbusses.tryhappy.net/SegaChannel/SEGA_CHANNEL_02L.bin http://kiddocabbusses.tryhappy.net/SegaChannel/SEGA_CHANNEL_GAME_GUIDE.bin