cdtsr.asm
来自「播放CDROM音乐的内存驻留程序」· 汇编 代码 · 共 142 行
ASM
142 行
; Resident CD-Audio player
; Assemble with TASM /ml CDTSR
; Link with TLINK /t CDTSR (option /t for .COM generation)
;
; Remember when using this programm with a soundcard as interface
; you set the line input/output enabled
;
; To load it into your memory type (LH) CDTSR
P386 ; using standard TASM model
IDEAL
DOSSEG
MODEL tiny
Time_Wait EQU 9 ; wait 1/2 sec between commands
STRUC PlayReq
length db 22
subunit db 0
command db 132 ; command 132 = play audio
status dw 0
reserved db 8 DUP (0)
adressmode db 0
start dd 0
number dd 0
ENDS
STRUC StopReq
length db 13
subunit db 0
command db 133 ; command 133 = stop audio
status dw 0
reserved db 8 DUP (0)
ENDS
STRUC IOoutput
length db 26
subunit db 0
command db 12 ; command 12 = IOCTL send output request
status dw 0
reserved db 8 DUP (0)
media db 0 ; media discriptor byte
transferoff dw ? ; transfer adress segment
transferseg dw ? ; transfer adress offset
number dw ? ; number of bytes to read
start dw 0 ; starting sector
pointer dd 0 ; pointer to requested volume (not used)
ENDS
STRUC IOinput
length db 26
subunit db 0
command db 3 ; command 3 = IOCTL send input request
status dw 0
reserved db 8 DUP (0)
media db 0 ; media discriptor byte
transferoff dw ? ; transfer adress segment
transferseg dw ? ; transfer adress offset
number dw ? ; number of bytes to read
start dw 0 ; starting sector
pointer dd 0 ; pointer to requested volume (not used)
ENDS
CODESEG
ORG 100h ; base adress of .COM files
Start: jmp Begin ; do temporary part first
;--------------------------------------------------------------------------
; interrupt data part
;--------------------------------------------------------------------------
BusyByte db 0 ; no re-entrance
CD_drive db 0 ; drive number
CD_track dw 1 ; current track
DriveInfo db 26 DUP (0) ; list of all CD-Rom drives
CD_InfoSect db 6 DUP (0) ; header in sector format
db 26*8 DUP (0) ; max. 26 tracks (make larger for more CD tracks)
CDA_PlayReq PlayReq <> ; record for play request
CDA_StopReq StopReq <> ; record for stop request
CDA_OutputReq IOoutput <> ; record for output request
CDA_InputReq IOinput <> ; record for input request
;---- control blocks for output
ControlReset db 2 ; code for reset
;---- control blocks for input
ControlVolume db 8 ; code for volume size
dd ? ; volume size set after call
ControlDisk db 10 ; code for disk info
db ? ; lowest track set after call
db ? ; highest track set after call
dd ? ; starting point of the lead-out track set after call
ControlTrack db 11 ; code for track info
db ? ; track to get info from
dd ? ; starting point of the track set after call
db ? ; track control information
ControlStatus db 15 ; code for general status
dw ? ; audio status bit set after call
dd ? ; starting location of last
; play or for next resume set after call
dd ? ; ending location for last
; play or for next resume set after call
ControlStatus2 db 6 ; code for disk status
dd ? ; status bits
; bit 00 = 0 : door closed
; = 1 : door open
; bit 01 = 0 : door locked
; = 1 : door un-locked
; bit 02 = 0 : supports only cooked reading
; = 1 : supports cooked & raw reading
; bit 03 = 0 : read only
; = 1 : read/write
; bit 04 = 0 : data read only
; = 1 : data read and play audio/video tracks
; bit 05 = 0 : no interleaving
; = 1 : supports ISO-9660 interleaving using interleave size
; bit 06 = reserved
; bit 07 = 0 : no pre-fetching
; = 1 : supports pre-fetching requests
; bit 08 = 0 : no audio channel manipulation
; = 1 : supports audio channel manipulation
; bit 09 = 0 : supports HSG adressing mode
; = 1 : supports HSG and Red Book adressing mode
; bit 10 = reserved
; bit 11 = 0 : disc is present in drive
; = 1 : no disc is present in drive
; bit 12 = 0 : doesn't support R-W sub-channels
; = 1 : supports R-W sub-channels
; bits (13-31) = reserved
ControlLocation db 12 ; code for location
db 1 ; control and adr byte (sony red book)
db ? ; track number (in sony format...)
db ? ; point or index
; running time within a track
db ? ; min
db ? ; sec
db ? ; frame
db ? ; always zero
; running time on the disk
db ? ; min
db ? ; sec
db ? ; frame
InfoScreen11_T db '谀哪哪哪哪哪哪哪目'
InfoScreen12_T db '砃o disc present
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?