Jump to content
IGNORED

TI-99/4A port of Colecovision Ambigram


retroclouds

Recommended Posts

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

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 ?

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...