+retroclouds Posted January 30, 2011 Share Posted January 30, 2011 Daniel recently did a Colecovision VDP demo in Z80 assembly language. You can read all about it here. Yesterday I ported his Z80 code over to the TI-99/4A. Basically as a test for my spectra2 library. I was surprised that porting the demo was so easy and straightforward. Took me about 4 hours. The biggest challenge was actually dealing with the 16 bit registers whereas the Z80 has 8 bit registers. http://www.youtube.com/watch?v=mmrh31oBx-Q You can download the cartridge binary for classic99 here. ambigram.zip And here's the TMS9900 assembly code. I tried to stay very close to the Z80 code. I'm aware that we normally do certain things differently on the TMS9900. ; ColecoVision - Ambigram Logo ; By Daniel Bienvenu, 2011 ; TI-99/4A conversion by Retroclouds ; Note: the TI-99/4A has 16 bit registers AORG >6000 *-------------------------------------------------------------- * Cartridge header *-------------------------------------------------------------- GRMHDR BYTE >AA,1,1,0,0,0 DATA PROG BYTE 0,0,0,0,0,0,0,0 PROG DATA 0 DATA RUNLIB HW BYTE 21 TEXT 'COLECOVISION AMBIGRAM' *-------------------------------------------------------------- * Include required files & startup options *-------------------------------------------------------------- COPY "D:\Projekte\spectra2\tms9900\runlib.a99" SPVMOD EQU GRAPH1 ; Video mode. See VIDTAB for details. SPFONT EQU FNOPT7 ; Font to load. See LDFONT for details. SPFCLR EQU >F0 ; Foreground/Background color for font. SPFBCK EQU >01 ; Screen background color. *-------------------------------------------------------------- * Setup memory *-------------------------------------------------------------- FRAMENO EQU >8340 COUNTER EQU >8342 RATE EQU >02 *-------------------------------------------------------------- * Fake NMI *-------------------------------------------------------------- NMI SOC @WBIT6,CONFIG ; Lock Fake NMI until next frame ; Refresh Rate DEC @COUNTER ; counter=counter-1 JNE NMIEND ; Exit if counter != 0 LI R0,RATE MOV R0,@COUNTER ; Set counter=2 ; Do Animation LI R0,FRAMES A @FRAMENO,R0 ; SIMPLE COLOR FRENZY EFFECT - START ; Uses FRAMENO for colour seed ; Registers are just memory locations, so we can do some funky stuff MOV @FRAMENO,R4 MOVB @R4LB,@R4HB ; hi-byte of R4 = lo-byte of R4 SRC R4,1 ORI R4,2 MOVB @BD7,R4 ; Set hi-byte of R4=7 BL @PUTVRX ; SIMPLE COLOR FRENZY EFFECT - END BL @WREGNB ; Set VDP register from nibble BL @WREGNB ; Set VDP register from nibble ; Update frame number ; We need a check because of 16 bit memory locations MOV @FRAMENO,R0 CI R0,254 JEQ NMI1 INC @FRAMENO ; FRAMENO=FRAMENO+1 JMP NMIEND NMI1 LI R0,1 MOV R0,@FRAMENO NMIEND B @HOOKOK ; Back to thread scheduler *-------------------------------------------------------------- * Write VDP register with nibbles from *R0 *-------------------------------------------------------------- WREGNB MOV R11,R1 ; Save return address (R11) set by BL CLR R4 MOVB *R0+,R4 ; Load in high-byte of R4 SRL R4,4 ; High nibble is in HI-byte, Low-nibble is in LO-byte MOV R4,R2 ; R2=R4 ANDI R2,>00FF SRL R2,4 ; Right-align Low-nibble in LO-byte MOVB @R2LB,@R4LB ; Move LO-byte of R2 into LO-byte of R4 BL @PUTVRX B *R1 ; Return to caller *-------------------------------------------------------------- * Start *-------------------------------------------------------------- MAIN BL @SCROFF ; Turn screen off BL @PUTVR ; Set Color table to $2000 DATA >0380 ; MSB=VDP register LSB=Byte to Write ; Color table BL @FILV ; FILL_VRAM DATA >2000,>01,32 ; UPLOAD CHARSET#1 BL @CPYM2V ; WRITE_VRAM DATA >0000,PATTERN1,>0700 ; UPLOAD CHARSET#2 BL @CPYM2V ; WRITE_VRAM DATA >0800,PATTERN2,>0700 LI R0,>2400 ; NAME1 = $2400 MOV R0,@WBASE ; SET PNT BASE ADDRESS BL @PUTBOX ; OFFSET (9,3), SIZE(14,14) DATA >0309,>0E0E,FRAME1,EOL LI R0,>2800 ; NAME2 = $2800 MOV R0,@WBASE ; SET PNT BASE ADDRESS BL @PUTBOX ; OFFSET (7,4), SIZE(14,14) DATA >0407,>0E0E,FRAME2,EOL LI R0,>2C00 ; NAME3 = $2C00 MOV R0,@WBASE ; SET PNT BASE ADDRESS BL @PUTBOX ; OFFSET (7,6), SIZE(14,14) DATA >0607,>0E0E,FRAME3,EOL LI R0,>3000 ; NAME4 = $3000 MOV R0,@WBASE ; SET PNT BASE ADDRESS BL @PUTBOX ; OFFSET (9,7), SIZE(14,14) DATA >0709,>0E0E,FRAME4,EOL LI R0,>3400 ; NAME5 = $3400 MOV R0,@WBASE ; SET PNT BASE ADDRESS BL @PUTBOX ; OFFSET (9,7), SIZE(14,14) DATA >060B,>0E0E,FRAME5,EOL LI R0,>3800 ; NAME6 = $3800 MOV R0,@WBASE ; SET PNT BASE ADDRESS BL @PUTBOX ; OFFSET (11,4), SIZE(14,14) DATA >040B,>0E0E,FRAME5,EOL ; INIT FRAME# and COUNTER FOR THE ANIMATION LI R0,1 ; Load 16-bit register R0 with 1 MOV R0,@FRAMENO ; Move value in R0 to memory $8340 INC R0 ; R0=2 MOV R0,@COUNTER ; Move value in R0 to memory $8342 BL @MKHOOK ; Make user hook DATA NMI BL @SCRON ; Turn screen on THEEND B @TMGR ; Start thread scheduler (kinda like JP $THEEND) FRAMES ; STILL (FRAME#1) - 16 cycles BYTE >29,>40,>29,>40,>29,>40,>29,>40 BYTE >29,>40,>29,>40,>29,>40,>29,>40 BYTE >29,>40,>29,>40,>29,>40,>29,>40 BYTE >29,>40,>29,>40,>29,>40,>29,>40 ; CLOCKWISE SPIN - 16 cycles BYTE >29,>40,>2a,>40,>2a,>40,>2a,>40 BYTE >2b,>40,>2b,>40,>2b,>40,>2c,>41 BYTE >2c,>41,>2c,>41,>2d,>41,>2d,>41 BYTE >2d,>41,>2e,>41,>2e,>41,>2e,>41 ; STILL (FRAME#1) - 16 cycles BYTE >29,>40,>29,>40,>29,>40,>29,>40 BYTE >29,>40,>29,>40,>29,>40,>29,>40 BYTE >29,>40,>29,>40,>29,>40,>29,>40 BYTE >29,>40,>29,>40,>29,>40,>29,>40 ; COUNTER CLOCKWISE SPIN - 16 cycles BYTE >29,>40,>2e,>41,>2e,>41,>2e,>41 BYTE >2d,>41,>2d,>41,>2d,>41,>2d,>41 BYTE >2c,>41,>2c,>41,>2b,>40,>2b,>40 BYTE >2b,>40,>2a,>40,>2a,>40,>2a,>40 ; STILL (FRAME#1) - 16 cycles BYTE >29,>40,>29,>40,>29,>40,>29,>40 BYTE >29,>40,>29,>40,>29,>40,>29,>40 BYTE >29,>40,>29,>40,>29,>40,>29,>40 BYTE >29,>40,>29,>40,>29,>40,>29,>40 ; CLOCKWISE SPIN (FULL & SLOWER) - 48 cycles BYTE >2a,>40,>2a,>40,>2a,>40,>2a,>40 BYTE >2b,>40,>2b,>40,>2b,>40,>2b,>40 BYTE >2c,>41,>2c,>41,>2c,>41,>2c,>41 BYTE >2d,>41,>2d,>41,>2d,>41,>2d,>41 BYTE >2e,>41,>2e,>41,>2e,>41,>2e,>41 BYTE >29,>40,>29,>40,>29,>40,>29,>40 BYTE >2a,>40,>2a,>40,>2a,>40,>2a,>40 BYTE >2b,>40,>2b,>40,>2b,>40,>2b,>40 BYTE >2c,>41,>2c,>41,>2c,>41,>2c,>41 BYTE >2d,>41,>2d,>41,>2d,>41,>2d,>41 BYTE >2e,>41,>2e,>41,>2e,>41,>2e,>41 BYTE >29,>40,>29,>40,>29,>40,>29,>40 ; FRAMES 1-3 WITH CHARSET#1 ; FRAMES 4-6 WITH CHARSET#2 ; FRAMES 16x16 CHARS FRAME1 BYTE 14*14 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0,1,2,3,4,5,6,7,8,9,10,11,12,0 BYTE 0,13,14,15,16,5,17,18,19,0,20,21,0,0 BYTE 0,22,23,24,25,26,27,28,29,30,31,32,0,0 BYTE 0,0,33,34,35,36,37,38,39,40,41,42,43,0 BYTE 0,0,44,45,0,5,46,47,19,48,49,50,51,0 BYTE 0,52,53,54,55,56,57,58,19,59,60,61,62,0 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 FRAME2 BYTE 14*14 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0,0,0,63,64,0,0,0,0,0,0,0,0,0 BYTE 0,0,65,66,67,68,0,0,0,0,0,0,0,0 BYTE 0,0,69,70,71,72,73,74,0,0,0,0,0,0 BYTE 0,0,0,75,76,77,78,79,80,0,0,0,0,0 BYTE 0,0,81,82,0,83,84,85,86,87,88,0,0,0 BYTE 89,90,91,92,93,94,95,96,97,98,40,99,100,0 BYTE 0,101,102,103,104,105,106,0,107,108,109,110,111,112 BYTE 0,0,0,113,114,115,116,117,118,119,120,121,0,0 BYTE 0,0,0,0,0,122,123,124,125,126,127,128,0,0 BYTE 0,0,0,0,0,0,129,130,131,132,133,134,0,0 BYTE 0,0,0,0,0,0,0,0,135,136,137,138,0,0 BYTE 0,0,0,0,0,0,0,0,0,139,140,0,0,0 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 FRAME3 BYTE 14*14 BYTE 0,0,0,0,0,141,142,0,0,0,0,0,0,0 BYTE 0,0,0,0,143,144,145,0,0,0,0,0,0,0 BYTE 0,0,0,0,146,147,148,149,0,0,0,0,0,0 BYTE 0,150,151,152,153,154,155,156,157,0,0,0,0,0 BYTE 0,139,158,159,160,0,161,162,163,0,0,0,0,0 BYTE 0,0,164,165,166,167,168,169,170,171,0,0,0,0 BYTE 0,0,0,172,173,174,175,176,177,178,0,0,0,0 BYTE 0,0,0,0,179,180,181,182,183,184,185,0,0,0 BYTE 0,0,0,0,186,187,188,189,190,191,192,193,0,0 BYTE 0,0,0,0,0,194,195,196,64,197,198,199,64,0 BYTE 0,0,0,0,0,0,200,201,202,203,204,205,206,0 BYTE 0,0,0,0,0,139,207,208,209,210,0,0,0,0 BYTE 0,0,0,0,0,0,211,212,213,25,0,0,0,0 BYTE 0,0,0,0,0,0,0,214,215,0,0,0,0,0 FRAME4 BYTE 14*14 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0,0,0,0,1,0,0,2,3,4,0,0,0,0 BYTE 0,0,0,0,5,6,7,8,9,10,0,0,0,0 BYTE 0,0,0,0,11,12,13,14,15,16,0,0,0,0 BYTE 0,0,0,0,17,0,18,19,20,21,0,0,0,0 BYTE 0,0,0,0,22,23,24,25,23,23,0,0,0,0 BYTE 0,0,0,0,26,27,28,29,30,31,0,0,0,0 BYTE 0,0,0,0,32,33,34,35,36,37,0,0,0,0 BYTE 0,0,0,0,38,38,39,40,38,41,0,0,0,0 BYTE 0,0,0,0,42,43,44,45,0,46,0,0,0,0 BYTE 0,0,0,0,47,48,49,50,51,52,0,0,0,0 BYTE 0,0,0,0,53,54,55,56,57,58,0,0,0,0 BYTE 0,0,0,0,59,60,61,0,0,62,0,0,0,0 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 FRAME5 BYTE 14*14 BYTE 0,0,0,0,0,0,0,63,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,64,65,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,66,67,68,69,70,71,0,0 BYTE 0,0,0,0,0,72,0,73,74,75,76,77,78,0 BYTE 0,0,0,0,79,80,81,82,0,83,84,85,0,0 BYTE 0,0,0,0,86,87,88,89,90,91,92,93,0,0 BYTE 0,0,0,94,19,95,96,97,98,99,100,0,0,0 BYTE 0,0,0,101,102,103,0,104,105,106,0,0,0,0 BYTE 0,0,107,108,109,110,111,112,113,114,0,0,0,0 BYTE 0,69,115,116,117,0,118,119,120,0,0,0,0,0 BYTE 0,121,122,123,124,125,126,127,128,0,0,0,0,0 BYTE 0,0,129,130,0,131,132,133,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,134,135,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,136,0,0,0,0,0,0,0 FRAME6 BYTE 14*14 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,0,0,0,69,137,0,0,0 BYTE 0,0,0,0,0,0,0,0,138,139,140,0,0,0 BYTE 0,0,0,0,0,0,0,141,142,143,144,0,0,0 BYTE 0,0,0,0,0,145,146,147,148,149,150,151,152,0 BYTE 0,0,79,153,154,155,156,157,158,69,159,160,161,162 BYTE 0,163,164,165,166,167,168,169,170,171,172,173,174,175 BYTE 176,177,178,179,180,181,182,183,184,185,186,187,0,0 BYTE 188,189,190,191,0,192,193,194,195,196,197,0,0,0 BYTE 0,198,199,200,201,202,203,204,205,0,0,0,0,0 BYTE 0,0,0,206,207,208,209,0,0,0,0,0,0,0 BYTE 0,0,0,210,211,212,0,0,0,0,0,0,0,0 BYTE 0,0,0,213,0,0,0,0,0,0,0,0,0,0 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; CHARSET#1 SIZE : 216 ; CHARSET#2 SIZE : 214 PATTERN1 BYTE 0,0,0,0,0,0,0,0 BYTE 15,63,121,113,240,240,240,240 BYTE 0,192,224,224,240,240,192,0 BYTE 15,31,63,63,121,121,112,240 BYTE 0,128,192,192,224,224,224,240 BYTE 240,240,240,240,240,240,240,240 BYTE 0,1,3,7,7,15,15,15 BYTE 112,252,254,255,15,14,28,56 BYTE 3,7,7,15,15,15,15,15 BYTE 192,224,48,48,0,0,0,0 BYTE 3,7,15,15,30,30,28,60 BYTE 193,224,240,240,120,120,56,60 BYTE 209,155,149,145,0,0,0,0 BYTE 240,240,240,240,240,240,240,121 BYTE 16,48,112,240,240,240,240,224 BYTE 240,240,240,240,240,112,121,121 BYTE 240,240,240,240,240,224,224,224 BYTE 15,15,15,15,7,7,3,0 BYTE 96,192,0,0,252,254,255,255 BYTE 15,15,15,15,15,15,15,15 BYTE 60,60,60,60,60,60,28,28 BYTE 60,60,60,60,60,60,56,56 BYTE 127,63,31,7,0,0,0,0 BYTE 224,192,240,248,0,0,0,0 BYTE 63,63,31,15,0,0,0,0 BYTE 192,192,128,0,0,0,0,0 BYTE 240,240,255,254,0,0,96,240 BYTE 8,8,12,7,1,0,0,0 BYTE 7,7,14,252,240,0,0,0 BYTE 15,7,7,3,0,0,6,15 BYTE 12,12,248,240,0,0,0,0 BYTE 28,12,12,4,2,0,0,0 BYTE 56,48,96,192,0,0,0,0 BYTE 0,0,0,0,3,6,12,28 BYTE 0,0,0,64,32,48,48,56 BYTE 0,0,0,0,15,31,48,48 BYTE 240,96,0,0,192,224,224,240 BYTE 0,0,0,15,63,112,224,224 BYTE 0,0,0,128,224,48,16,16 BYTE 15,6,0,0,127,255,15,15 BYTE 0,0,0,0,0,1,3,3 BYTE 0,0,0,0,240,248,252,252 BYTE 0,0,0,0,31,15,3,7 BYTE 0,0,0,0,224,248,252,254 BYTE 28,28,60,60,60,60,60,60 BYTE 56,56,60,60,60,60,60,60 BYTE 255,255,127,63,0,0,3,6 BYTE 0,192,224,224,240,240,240,240 BYTE 7,7,15,15,15,15,15,15 BYTE 158,158,15,15,15,15,15,15 BYTE 7,15,15,15,15,14,12,8 BYTE 158,15,15,15,15,15,15,15 BYTE 0,0,0,0,137,169,217,139 BYTE 60,28,30,30,15,15,7,131 BYTE 60,56,120,120,240,240,224,192 BYTE 0,0,0,0,12,12,7,3 BYTE 240,240,240,240,240,224,224,192 BYTE 28,56,112,240,255,127,63,14 BYTE 240,240,240,224,224,192,128,0 BYTE 15,15,7,7,3,3,1,0 BYTE 15,15,158,158,252,252,248,240 BYTE 0,3,15,15,7,7,3,0 BYTE 15,15,15,15,142,158,252,240 BYTE 0,0,0,0,16,126,255,243 BYTE 0,0,0,0,0,0,128,128 BYTE 1,3,7,7,15,15,31,30 BYTE 225,227,193,195,131,0,1,3 BYTE 192,192,192,192,192,64,2,3 BYTE 0,0,0,0,0,120,254,254 BYTE 30,28,30,31,15,15,7,1 BYTE 31,30,62,252,252,240,192,224 BYTE 11,15,31,30,62,60,60,120 BYTE 254,206,30,30,14,60,62,60 BYTE 0,0,0,7,15,15,15,31 BYTE 0,0,0,0,128,128,0,0 BYTE 224,48,0,0,0,0,0,0 BYTE 120,120,121,119,63,63,61,2 BYTE 124,248,248,224,192,193,1,3 BYTE 62,60,124,248,248,240,240,224 BYTE 0,0,0,0,1,7,7,15 BYTE 0,0,0,184,254,254,191,143 BYTE 0,0,5,15,30,124,120,248 BYTE 0,0,208,80,16,24,48,120 BYTE 3,7,15,15,7,1,40,56 BYTE 192,192,128,128,128,224,208,0 BYTE 31,31,63,29,60,30,159,143 BYTE 7,31,254,208,0,0,0,192 BYTE 128,129,131,15,15,31,30,60 BYTE 0,0,192,224,96,32,112,32 BYTE 0,24,20,45,3,2,2,0 BYTE 0,1,3,1,35,99,195,67 BYTE 248,224,224,225,195,195,195,135 BYTE 112,240,240,240,224,224,192,192 BYTE 0,92,127,103,3,3,3,7 BYTE 56,56,16,128,128,192,128,192 BYTE 1,1,1,0,0,0,0,0 BYTE 15,131,129,224,123,63,10,0 BYTE 224,224,224,225,225,193,3,3 BYTE 124,124,248,240,240,224,224,192 BYTE 0,0,31,127,127,255,243,195 BYTE 0,0,0,128,128,128,196,135 BYTE 3,3,3,1,0,0,0,0 BYTE 223,254,252,248,96,0,0,0 BYTE 128,0,0,0,0,0,0,28 BYTE 15,15,31,30,62,60,124,248 BYTE 133,135,15,15,15,7,7,3 BYTE 240,252,30,6,131,193,225,243 BYTE 3,3,3,1,56,56,60,60 BYTE 128,128,132,236,252,40,0,0 BYTE 7,7,31,15,30,30,28,28 BYTE 131,131,143,7,15,31,63,62 BYTE 132,140,129,129,0,0,0,0 BYTE 128,192,88,80,16,16,0,0 BYTE 8,13,15,7,1,0,0,0 BYTE 240,240,224,192,131,1,1,1 BYTE 1,0,0,191,254,225,193,243 BYTE 248,120,120,248,248,240,224,224 BYTE 15,7,1,3,3,7,7,15 BYTE 0,192,224,224,224,192,128,128 BYTE 0,0,0,0,0,0,0,112 BYTE 24,16,17,23,0,0,0,0 BYTE 60,120,240,192,0,0,0,0 BYTE 251,255,127,0,0,0,0,0 BYTE 192,192,0,0,0,0,0,1 BYTE 15,31,62,60,124,120,248,240 BYTE 1,7,31,31,62,62,124,120 BYTE 252,252,252,156,62,60,28,60 BYTE 0,0,0,0,8,12,15,7 BYTE 0,0,0,0,0,0,0,192 BYTE 1,3,1,0,0,0,0,0 BYTE 240,224,192,64,0,0,0,0 BYTE 248,112,240,240,241,247,255,127 BYTE 124,124,248,240,240,224,161,129 BYTE 15,63,127,124,248,240,224,0 BYTE 224,224,240,240,120,120,240,240 BYTE 126,20,0,0,0,0,0,0 BYTE 0,6,7,7,7,7,3,1 BYTE 1,129,195,135,135,143,15,255 BYTE 240,224,224,192,192,128,0,0 BYTE 1,0,0,0,0,0,0,0 BYTE 252,84,0,0,0,0,0,0 BYTE 0,0,0,0,0,3,7,31 BYTE 0,0,0,0,248,252,255,235 BYTE 0,0,1,1,3,3,3,3 BYTE 127,254,252,240,224,192,128,215 BYTE 131,7,7,15,31,30,134,192 BYTE 3,1,1,0,0,0,0,0 BYTE 255,255,255,212,224,96,64,0 BYTE 224,192,0,2,15,31,127,126 BYTE 0,0,0,254,255,255,239,15 BYTE 6,12,22,2,3,6,0,3 BYTE 0,0,0,128,0,0,65,195 BYTE 0,0,0,3,63,127,254,248 BYTE 0,0,0,128,240,176,20,4 BYTE 0,1,3,3,3,3,3,1 BYTE 252,240,224,192,195,219,255,255 BYTE 15,30,62,252,248,240,224,128 BYTE 0,0,0,0,0,0,24,124 BYTE 3,15,15,31,30,60,63,31 BYTE 240,192,0,3,7,31,255,255 BYTE 8,56,248,240,224,192,128,1 BYTE 236,32,0,0,0,1,7,15 BYTE 1,3,15,63,255,254,248,224 BYTE 254,252,240,192,128,0,0,0 BYTE 15,7,0,0,0,0,0,0 BYTE 252,64,0,0,0,0,0,0 BYTE 3,1,0,0,0,0,1,3 BYTE 224,96,113,49,57,120,248,240 BYTE 31,143,230,227,195,2,0,0 BYTE 192,0,0,0,128,128,0,0 BYTE 0,0,0,15,31,127,254,248 BYTE 0,0,128,224,248,252,60,60 BYTE 8,24,24,51,63,31,15,4 BYTE 15,63,255,254,248,224,192,0 BYTE 224,224,0,2,7,31,31,30 BYTE 0,0,0,0,64,192,240,56 BYTE 9,57,49,33,49,56,24,28 BYTE 254,231,226,224,240,248,248,120 BYTE 30,188,252,252,8,0,0,0 BYTE 0,0,48,63,63,125,120,56 BYTE 30,31,15,15,71,231,127,31 BYTE 24,28,8,140,8,152,144,0 BYTE 14,3,2,0,0,0,0,0 BYTE 240,240,224,0,1,7,15,15 BYTE 3,15,63,127,254,252,240,192 BYTE 240,248,252,136,24,56,0,0 BYTE 124,63,31,11,0,0,0,0 BYTE 254,252,248,224,0,0,0,0 BYTE 0,1,1,0,0,0,3,15 BYTE 0,130,199,199,231,225,240,240 BYTE 31,30,184,156,12,15,7,0 BYTE 0,0,0,0,0,128,192,0 BYTE 0,0,0,0,0,7,127,255 BYTE 0,0,0,0,0,224,240,248 BYTE 0,0,3,7,31,63,127,60 BYTE 63,127,254,248,240,128,128,3 BYTE 224,0,0,0,0,16,222,255 BYTE 3,3,7,15,31,60,48,32 BYTE 255,240,224,128,1,3,15,63 BYTE 124,120,120,248,240,224,193,131 BYTE 15,31,63,127,120,248,240,224 BYTE 255,247,131,7,7,15,63,254 BYTE 192,192,192,192,128,0,0,0 BYTE 0,13,15,1,0,0,0,0 BYTE 255,254,248,128,0,0,0,0 BYTE 6,0,1,0,0,0,0,0 BYTE 0,224,192,64,48,48,64,0 BYTE 255,255,255,59,0,0,0,0 BYTE 252,252,224,128,0,3,15,11 BYTE 6,6,7,87,255,255,255,195 BYTE 0,0,0,0,128,128,192,128 BYTE 0,0,0,1,1,0,1,0 BYTE 96,248,248,224,224,192,195,239 BYTE 131,3,7,31,63,255,254,248 BYTE 255,63,27,0,0,0,0,0 BYTE 224,128,0,0,0,0,0,0 PATTERN2 BYTE 0,0,0,0,0,0,0,0 BYTE 240,64,32,64,240,0,128,240 BYTE 0,1,3,7,7,15,15,15 BYTE 127,255,255,255,128,0,0,128 BYTE 240,252,254,254,7,3,3,15 BYTE 128,0,1,15,63,127,252,240 BYTE 0,0,252,255,255,255,0,0 BYTE 0,0,0,128,192,224,48,16 BYTE 15,15,13,12,8,0,0,0 BYTE 248,252,254,127,0,0,0,0 BYTE 126,126,60,48,0,0,0,0 BYTE 240,252,127,63,15,1,0,0 BYTE 0,0,255,255,255,252,0,0 BYTE 0,8,240,224,128,0,0,0 BYTE 0,0,3,7,15,15,15,15 BYTE 31,255,255,255,192,0,0,192 BYTE 128,240,252,254,63,15,15,63 BYTE 0,0,0,0,48,112,192,192 BYTE 0,0,192,224,48,48,48,48 BYTE 7,3,0,0,0,0,0,0 BYTE 255,255,255,31,0,0,0,0 BYTE 254,252,240,128,0,0,0,0 BYTE 255,255,127,31,0,0,0,0 BYTE 255,255,255,255,0,0,0,0 BYTE 241,243,227,129,0,0,0,0 BYTE 143,207,207,143,12,12,12,4 BYTE 24,60,126,127,243,241,240,112 BYTE 3,7,15,15,15,143,207,79 BYTE 192,224,240,48,24,24,24,24 BYTE 0,0,0,0,7,12,8,24 BYTE 0,0,0,0,15,63,127,127 BYTE 0,0,0,0,224,248,252,254 BYTE 127,63,31,7,0,0,0,0 BYTE 254,254,252,240,0,0,0,0 BYTE 24,16,48,224,0,0,0,0 BYTE 24,24,24,24,12,15,7,3 BYTE 242,243,241,240,240,240,224,192 BYTE 14,15,143,207,254,126,60,24 BYTE 0,0,0,0,255,255,255,255 BYTE 32,48,48,48,241,243,243,241 BYTE 0,0,0,0,129,199,207,143 BYTE 0,0,0,0,248,254,255,255 BYTE 0,0,0,0,3,15,63,127 BYTE 0,0,0,0,252,255,255,255 BYTE 0,0,0,0,0,0,192,224 BYTE 12,12,12,12,7,3,0,0 BYTE 3,3,14,12,0,0,0,0 BYTE 252,240,240,252,127,63,15,3 BYTE 3,0,0,3,255,255,255,252 BYTE 240,240,240,240,224,192,0,0 BYTE 0,0,0,1,7,15,16,0 BYTE 0,0,63,255,255,255,0,0 BYTE 0,0,128,240,252,254,63,15 BYTE 0,0,0,0,12,60,126,126 BYTE 0,0,0,0,254,127,63,31 BYTE 0,0,0,16,48,176,240,240 BYTE 8,12,7,3,1,0,0,0 BYTE 0,0,255,255,255,63,0,0 BYTE 15,63,254,252,240,128,0,1 BYTE 240,192,192,224,127,127,63,15 BYTE 1,0,0,1,255,255,255,254 BYTE 240,240,240,224,224,192,128,0 BYTE 15,1,0,15,2,4,2,15 BYTE 0,0,24,28,16,104,96,144 BYTE 1,0,0,0,0,5,31,31 BYTE 128,224,32,0,0,64,232,254 BYTE 31,62,28,31,15,15,7,3 BYTE 255,63,15,3,0,192,240,248 BYTE 128,192,192,240,240,112,24,24 BYTE 0,0,0,0,0,0,1,1 BYTE 0,0,5,63,127,255,241,240 BYTE 0,0,0,192,240,252,254,127 BYTE 0,0,0,7,31,25,24,62 BYTE 254,255,63,7,0,0,0,0 BYTE 8,128,208,232,64,0,0,0 BYTE 3,3,6,4,0,0,0,0 BYTE 240,248,124,62,62,30,15,3 BYTE 31,15,3,0,0,32,62,63 BYTE 128,192,192,224,192,192,192,192 BYTE 0,0,0,0,0,0,0,3 BYTE 31,15,15,3,1,0,224,224 BYTE 128,192,240,252,255,127,31,7 BYTE 0,24,28,4,12,220,248,240 BYTE 2,127,255,255,245,240,248,120 BYTE 0,64,240,252,252,126,31,15 BYTE 63,62,0,0,0,0,0,128 BYTE 7,15,15,15,14,14,15,7 BYTE 240,240,48,48,48,16,145,243 BYTE 3,0,0,16,248,252,254,238 BYTE 112,5,7,7,7,0,0,0 BYTE 0,0,128,128,56,62,127,127 BYTE 124,63,31,15,7,1,128,224 BYTE 7,3,195,251,255,255,61,0 BYTE 192,192,192,224,192,128,0,0 BYTE 0,0,0,0,0,0,14,15 BYTE 251,255,255,127,20,0,1,0 BYTE 230,198,134,14,12,24,248,224 BYTE 0,0,0,0,0,0,2,13 BYTE 239,195,192,0,0,0,0,0 BYTE 240,252,255,127,31,7,3,0 BYTE 0,0,0,128,224,248,240,224 BYTE 31,15,7,1,0,0,0,34 BYTE 192,240,252,254,127,31,15,3 BYTE 0,0,0,2,130,231,246,254 BYTE 26,48,112,96,99,103,103,127 BYTE 128,0,252,254,255,223,207,155 BYTE 0,0,0,0,128,192,224,224 BYTE 1,3,3,7,3,3,3,1 BYTE 255,255,255,215,129,192,224,240 BYTE 0,192,224,248,248,252,62,30 BYTE 252,56,25,1,1,0,0,0 BYTE 0,64,192,224,224,142,15,31 BYTE 127,63,24,0,0,128,224,240 BYTE 24,8,12,28,13,15,15,7 BYTE 240,112,240,240,240,224,224,128 BYTE 0,0,0,0,40,252,252,252 BYTE 252,255,127,31,7,2,0,192 BYTE 31,15,239,255,254,248,0,0 BYTE 59,49,112,32,56,16,0,0 BYTE 252,255,127,31,7,3,0,0 BYTE 0,0,128,224,240,248,248,56 BYTE 7,6,3,7,7,3,1,0 BYTE 76,0,0,128,224,240,252,255 BYTE 240,248,124,126,62,15,15,15 BYTE 0,0,0,32,224,192,128,128 BYTE 0,0,10,23,3,16,16,16 BYTE 0,0,128,248,254,255,63,31 BYTE 0,0,1,0,0,128,128,192 BYTE 24,248,240,0,0,0,0,0 BYTE 127,31,7,3,0,0,0,0 BYTE 191,255,252,240,0,0,0,0 BYTE 28,30,15,15,3,3,0,0 BYTE 3,1,128,224,240,253,255,127 BYTE 224,240,248,248,56,248,248,248 BYTE 23,0,0,0,4,7,1,25 BYTE 224,0,0,0,0,128,0,0 BYTE 14,20,80,56,8,0,0,0 BYTE 0,0,0,4,12,106,42,48 BYTE 0,0,0,3,3,3,7,7 BYTE 1,0,224,248,252,254,159,151 BYTE 128,128,128,0,0,0,0,128 BYTE 0,0,56,254,228,228,240,240 BYTE 3,7,3,3,3,1,1,0 BYTE 135,135,195,193,225,224,240,248 BYTE 192,192,224,224,224,224,240,112 BYTE 0,3,7,15,15,30,28,28 BYTE 0,224,248,248,240,48,112,96 BYTE 248,124,124,60,30,31,15,15 BYTE 0,0,0,0,0,0,6,134 BYTE 248,124,28,30,6,2,0,0 BYTE 48,32,96,64,128,128,0,0 BYTE 0,0,0,0,0,0,7,31 BYTE 0,0,0,0,0,0,240,248 BYTE 0,0,3,3,1,1,0,0 BYTE 0,192,192,224,240,240,248,120 BYTE 30,30,31,15,15,7,3,1 BYTE 96,64,194,143,159,255,254,252 BYTE 7,7,3,194,224,224,224,96 BYTE 194,206,254,248,224,0,16,60 BYTE 0,0,0,0,0,64,248,254 BYTE 63,255,174,14,15,31,15,7 BYTE 252,126,31,31,15,7,135,3 BYTE 0,0,0,0,128,128,192,192 BYTE 0,0,0,0,0,0,0,184 BYTE 15,31,31,30,30,30,30,14 BYTE 192,240,252,252,62,30,31,15 BYTE 124,60,62,30,31,15,15,7 BYTE 0,0,0,0,0,128,132,204 BYTE 80,0,3,231,126,16,0,0 BYTE 224,192,192,128,0,0,0,0 BYTE 60,56,8,1,7,31,63,119 BYTE 3,3,3,3,3,129,129,193 BYTE 254,223,207,195,195,193,225,224 BYTE 7,131,194,193,224,240,224,240 BYTE 3,1,33,96,112,253,255,63 BYTE 224,224,224,224,224,192,128,0 BYTE 3,3,7,14,15,7,15,7 BYTE 252,254,62,12,8,0,129,129 BYTE 31,15,15,7,135,195,195,224 BYTE 15,7,135,199,195,247,255,255 BYTE 131,131,129,129,128,128,128,128 BYTE 248,248,224,128,0,56,124,56 BYTE 0,0,0,1,3,7,6,12 BYTE 0,0,252,238,130,0,0,63 BYTE 67,3,1,0,0,0,0,0 BYTE 225,224,240,240,248,124,124,62 BYTE 240,240,248,126,95,31,7,3 BYTE 240,240,112,112,240,240,240,192 BYTE 7,3,3,1,0,0,0,0 BYTE 193,225,224,240,240,252,127,127 BYTE 224,240,224,240,240,254,252,240 BYTE 63,14,0,0,0,0,0,0 BYTE 48,0,4,31,127,119,195,195 BYTE 14,15,7,7,128,192,224,224 BYTE 255,255,251,227,135,6,4,12 BYTE 64,192,224,224,240,248,240,112 BYTE 30,31,15,15,7,3,0,0 BYTE 0,0,128,128,128,0,0,0 BYTE 31,2,0,0,0,0,0,0 BYTE 224,0,0,0,0,0,0,0 BYTE 0,0,2,4,12,12,12,12 BYTE 0,128,192,112,120,60,62,31 BYTE 193,0,0,0,0,0,0,0 BYTE 240,240,248,120,124,62,62,31 BYTE 12,24,29,31,63,31,0,0 BYTE 120,112,240,224,224,192,0,0 BYTE 30,14,15,15,15,7,3,3 BYTE 31,15,7,135,131,195,195,227 BYTE 0,128,128,128,128,192,192,192 BYTE 30,15,70,254,60,0,0,0 BYTE 1,0,0,0,0,2,11,9 BYTE 251,255,127,31,23,0,0,192 BYTE 192,192,192,128,0,0,0,0 BYTE 137,236,100,32,0,0,0,0 END Quote Link to comment Share on other sites More sharing options...
matthew180 Posted January 31, 2011 Share Posted January 31, 2011 Pretty cool. What I'd really like to see (or be a part of) is the MSX BOLD demo ported to the 99/4A. I emailed the guys who wrote it, but they were not very responsive. I guess we will just have to figure it out for ourselves... Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted January 31, 2011 Share Posted January 31, 2011 Pretty cool. What I'd really like to see (or be a part of) is the MSX BOLD demo ported to the 99/4A. I emailed the guys who wrote it, but they were not very responsive. I guess we will just have to figure it out for ourselves... This is probably a stupid question, but does the MSX use the 9918A? Those graphics do not look 9918, but I could be missing something from the YouTube encoding. Quote Link to comment Share on other sites More sharing options...
matthew180 Posted January 31, 2011 Share Posted January 31, 2011 MSX1 used the 9918A MSX2 used the 9938 MSX2xxx used the 9938, 9958, 9990, and various others Some of the best games of that era come from the MSX, and the graphics are awesome. It is a shame all our software is blocky and ugly, since we know it could have looked much better. Do a Google search of MSX1 games and take a look at some screen shots. Konami games especially, they were masters at 9918A graphics. Of course the MSX used the Z80@3.5MHz or faster and did not have a wait-state generator slowing down every memory operation, so they actually can over-run the VDP. Basically they can pump data to the 9918A faster than we can, so it would be interesting to see if we could pull off a demo like BOLD. Quote Link to comment Share on other sites More sharing options...
marc.hull Posted January 31, 2011 Share Posted January 31, 2011 MSX1 used the 9918A MSX2 used the 9938 MSX2xxx used the 9938, 9958, 9990, and various others Some of the best games of that era come from the MSX, and the graphics are awesome. It is a shame all our software is blocky and ugly, since we know it could have looked much better. Do a Google search of MSX1 games and take a look at some screen shots. Konami games especially, they were masters at 9918A graphics. Of course the MSX used the Z80@3.5MHz or faster and did not have a wait-state generator slowing down every memory operation, so they actually can over-run the VDP. Basically they can pump data to the 9918A faster than we can, so it would be interesting to see if we could pull off a demo like BOLD. I would be interested to know if this was recorded on real MSX hardware or in emulation.. I know there was some controversy in the past in the C64 scene about limitations of real hardware VS the advantages of Emu. Any ideas ? Quote Link to comment Share on other sites More sharing options...
matthew180 Posted January 31, 2011 Share Posted January 31, 2011 I'm pretty sure it runs on real hardware: http://www.dvik-joyrex.com/ They have a nice collection of tools too... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.