Date: Mon, 21 Oct 1996 03:53:01 -0700 To: tghack-list@cpac.washington.edu From: Jens Christian Restemeier X-Software: MLF v2.3, Copyright 1995, 1996 by Bt X-Original-Id: <326B4868.D14@hrz.uni-bielefeld.de> Subject: CD-ROM Headers X-UIDL: 4c8350e97a452c8d45e667372f73bcf5 Hi ! A few additions to the TGHACK.faq: 1. The CDROM Bios functions: #define CD_BOOT 0x00 #define CD_RESET 0x01 #define CD_BASE 0x02 #define CD_READ 0x03 #define CD_SEEK 0x04 #define CD_EXEC 0x05 #define CD_PLAY 0x06 #define CD_SEARCH 0x07 #define CD_PAUSE 0x08 #define CD_STAT 0x09 #define CD_SUBA 0x0A #define CD_INFO 0x0B #define CD_CONTNTS 0x0C #define CD_SUBRQ 0x0D #define CD_PCMRD 0x0E #define CD_FADE 0x0F #define AD_RESET 0x10 #define AD_TRANS 0x11 #define AD_READ 0x12 #define AD_WRITE 0x13 #define AD_PLAY 0x14 #define AD_CPLAY 0x15 #define AD_STOP 0x16 #define AD_STAT 0x17 #define BM_FORMAT 0x18 #define BM_FREE 0x19 #define BM_READ 0x1A #define BM_WRITE 0x1B #define BM_DELETE 0x1C #define BM_FILES 0x1D #define EX_GETVER 0x1E #define EX_SETVEC 0x1F #define EX_GETFNT 0x20 #define EX_JOYSNS 0x21 #define EX_JOYREP 0x22 #define EX_SCRSIZ 0x23 #define EX_DOTMOD 0x24 #define EX_SCRMOD 0x25 #define EX_IMODE 0x26 #define EX_VMODE 0x27 #define EX_HMODE 0x28 #define EX_VSYNC 0x29 #define EX_RCRON 0x2A #define EX_RCROFF 0x2B #define EX_IQRON 0x2C #define EX_IQROFF 0x2D #define EX_BGON 0x2E #define EX_BGOFF 0x2F #define EX_SPRON 0x30 #define EX_SPROFF 0x31 #define EX_DSPON 0x32 #define EX_DSPOFF 0x33 #define EX_DMAMOD 0x34 #define EX_SPRDMA 0x35 #define EX_SATCLR 0x36 #define EX_SPRPUT 0x37 #define EX_SETRCR 0x38 #define EX_SETRED 0x39 #define EX_SETWRT 0x3A #define EX_SETDMA 0x3B #define EX_BINBCD 0x3C #define EX_BCDBIN 0x3D #define EX_RND 0x3E #define MA_MUL8U 0x3F #define MA_MUL8S 0x40 #define MA_MU16U 0x41 #define MA_DI16S 0x42 #define MA_DI16U 0x43 #define MA_SQRT 0x44 #define MA_SIN 0x45 #define MA_COS 0x46 #define MA_ATNI 0x47 #define PSG_BIOS 0x48 #define GRP_BIOS 0x49 #define KEY_BIOS 0x4A #define PSG_DRIVE 0x4B #define EX_COLORC 0x4C The jump-adress must be calculated by $E000+3*NUM. 2. To clear a few questions about sector #3 (the header) The original header from Golden Axe (shortened): include inf.h db ga_BIN_HI ;$00 ;00 IPLBLK H ;load start record no. of CD db HIGH(ga_BIN_LW) ;$00 ;01 IPLBLK M ;load start record no. of CD db LOW (ga_BIN_LW) ;$d7 ;02 IPLBLK L ;load start record no. of CD db ga_BIN_RL ;1 ;03 IPLBLN ;load block length of CD db LOW ($4000) ;$00 ;04 IPLSTA L ;program load address L db HIGH($4000) ;$40 ;05 IPLSTA H ;program load address H db LOW ($4000) ;$00 ;06 IPLJMP L ;program execute address L db HIGH($4000) ;$40 ;07 IPLJMP H ;program execute address H ; db 0 ;08 IPLMPR2 ;ipl set mpr2 (+ max_mapping) db 1 ;09 IPLMPR3 ;ipl set mpr3 (+ max_mapping) db 2 ;10 IPLMPR4 ;ipl set mpr4 (+ max_mapping) db 3 ;11 IPLMPR5 ;ipl set mpr5 (+ max_mapping) db 4 ;12 IPLMPR6 ;ipl set mpr6 (+ max_mapping) ; db 1 ;13 OPENMODE ;opening mode ;bit76543210 ; ||| ||__ data read to vram ; ||| | 0:not read ; ||| | 1:read ; ||| |___ data read to adpcm buff ; ||| 0:not read ; ||| 1:read ; |||_______ bg display ; || 0:disp on ; || 1:disp off ; ||________ adpcm play ; | 0:play ; | 1:not play ; |_________ adpcm play mode ; 0:single ; 1:repeat ; db reno__HI ;$00 ;14 GRPBLK H ;opening graphic data record no. db HIGH(reno__LW) ;$00 ;15 GRPBLK M ;opening graphic data record no. db LOW (reno__LW) ;$d8 ;16 GRPBLK L ;opening graphic data record no. db reno__RL ;$06 ;17 GRPBLN ;opening graphic data length db LOW ($1000) ;0 ;18 GRPADR L ;opening graphic data read adrress L db HIGH($1000) ;$10 ;19 GRPADR H ;opening graphic data read adrress H ; db 0 ;20 ADPBLK H ;opening ADPCM data record no. db 0 ;21 ADPBLK M ;opening ADPCM data record no. db 0 ;22 ADPBLK L ;opening ADPCM data record no. db 0 ;23 ADPBLN ;opening ADPCM data length db 0 ;24 ADPRATE ;opening ADPCM sampling rate ; db 0 ;25 ;(reserve) db 0 ;26 ;(reserve) db 0 ;27 ;(reserve) db 0 ;28 ;(reserve) db 0 ;29 ;(reserve) db 0 ;30 ;(reserve) db 0 ;31 ;(reserve) ; db 'PC Engine CD-ROM SYSTEM',0 ;(ID string) db 'Copyright HUDSON SOFT / NEC Home Electronics,Ltd.',0 db 'GOLDEN AXE ' ;program name (16 bytes) db ' ' ; (6 bytes) 3. And finally, the loader (Sektor #2): Source from Golden AXE: ; include biosw.h include inf.h ; player_s equ $3f00 stage_s equ $3f01 mode equ $3ffe ; seg cseg entry: ; reno wait !!! ; ldx #$60 ;_wait_lp: ; jsr ex_vsync ; dex ; bne _wait_lp ; ; initialize common work !!! ; clx _clr_lp: stz $2000,x inx bne _clr_lp ;Q[ PLAYER EQU 2000H ;PLAYATR STAGE EQU 2001H ;Xe[W PLAY_LAST EQU 2002H ;c PLAYTUBO EQU 2003H ;@x PLAYSCORE EQU 2004H ;¾_ PLAYHP EQU 2005H ; CONTINUE EQU 2006H ; lda #$ff sta player sta stage lda #3 sta play_last lda #1 sta playtubo stz playscore lda #15 sta playhp lda #3 sta continue stz mode lda #visual_bin_hi sta _cl lda #high(visual_bin_lw) sta _ch lda #low(visual_bin_lw) sta _dl lda #01 sta _dh lda #low($4000) sta _bl lda #high($4000) sta _bh lda #visual_bin_rl sta _al sei jsr cd_exec ; end Disassembled Sector #2 from my Golden Axe CD: 00000 LDX #$60 A2 60 00002 JSR $E07B 20 7B E0 ; EX_VSYNC 00005 DEX CA 00006 BNE $0002 D0 FA 00008 CLX 82 00009 STZ $00,X 74 00 0000B INX E8 0000C BNE $0009 D0 FB 0000E JSR $E030 20 30 E0 ; AD_RESET 00011 LDA #$FF A9 FF 00013 STA $00 85 00 00015 STA $01 85 01 00017 STZ $DB 64 DB 00019 JSR $E063 20 63 E0 ; EX_JOYSNS 0001C LDA $2228 AD 28 22 0001F CMP #$96 C9 96 00021 BCS $004A F0 27 00023 LDA $2228 AD 28 22 00026 CMP #$C6 C9 C6 00028 BCS $006A F0 40 0002A LDA #$00 A9 00 0002C STA $FC 85 FC ; _cl 0002E LDA #$01 A9 01 00030 STA $FD 85 FD ; _ch 00032 LDA #$EF A9 EF 00034 STA $FE 85 FE ; _dl 00036 LDA #$01 A9 01 00038 STA $FF 85 FF ; _dh 0003A LDA #$00 A9 00 0003C STA $FA 85 FA ; _bl 0003E LDA #$40 A9 40 00040 STA $FB 85 FB ; _bh 00042 LDA #$01 A9 01 00044 STA $F8 85 F8 ; _al 00046 SEI 78 00047 JSR $E00F 20 0F E0 ; CD_EXEC 0004A LDA #$00 A9 00 0004C STA $FC 85 FC 0004E LDA #$0D A9 0D 00050 STA $FD 85 FD 00052 LDA #$16 A9 16 00054 STA $FE 85 FE 00056 LDA #$01 A9 01 00058 STA $FF 85 FF 0005A LDA #$00 A9 00 0005C STA $FA 85 FA 0005E LDA #$40 A9 40 00060 STA $FB 85 FB 00062 LDA #$01 A9 01 00064 STA $F8 85 F8 00066 SEI 78 00067 JSR $E00F 20 0F E0 ; CD_EXEC 0006A INC $DB E6 DB 0006C LDA #$00 A9 00 0006E STA $FC 85 FC 00070 LDA #$0D A9 0D 00072 STA $FD 85 FD 00074 LDA #$5A A9 5A 00076 STA $FE 85 FE 00078 LDA #$01 A9 01 0007A STA $FF 85 FF 0007C LDA #$00 A9 00 0007E STA $FA 85 FA 00080 LDA #$40 A9 40 00082 STA $FB 85 FB 00084 LDA #$01 A9 01 00086 STA $F8 85 F8 00088 SEI 78 00089 JSR $E00F 20 0F E0 ; CD_EXEC final note: the included file "inf.h" is created by the CD-Creator. It contains the sector adress of every file. I could include an example, but these files are large. Jens Ch. Restemeier --- TGHack List Information ------------------------------------------- This has been a message from the TGHack List. To subscribe/unsubscribe, send a message to tghack-list-request@cpac.washington.edu, to send a message to the list, use the address tghack-list@cpac.washington.edu ------------------------------------------------------------------------