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 + -
显示快捷键?