flex_nav/plugins/cdplayer/cdplayer.a80
savelij13 881739653b CDplayer.flx 1.1:
- плагин доделан, описание/history в cdplayer.txt рядом с плагином.
FE 1.09
- исправлено: при выходе из редактора с несохраненным файлом и запросе на сохранение
  клавиша Enter теперь работает как подтверждение сохранения.
FN 1.16
- встроенный editor переехал в плагин откуда и запускается по F4, из FN удален.
- встроенный viewer переехал в плагин откуда и запускается по F3, из FN удален.
- встроенный help переехал в плагин откуда и запускается при нажатии F1, из FN удален.
- загрузка плагина отделена от запуска, теперь можно запускать плагины не
  только из панели FN.
- добавлен макрос формирования заголовка для плагинов.
- добавлена поддержка работы плагинов в адреса 0x4000-0x7FFF (окно 1) в дополнение
  к старым 0xC000-0xBFFF (окно 3), пока используется в плагине cdplayer.
- в окнах с ошибкой переделан на 2 типа окон вместо многих под каждую ошибку.
- исправлена потеря цвета при печати текста по указанному адресу.
- текстовым файлам вернул кодировку CP866, readme.md оставлен в кодировке UTF8.
2025-07-25 16:01:19 +03:00

718 lines
13 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; LAST UPDATE: 15.07.2025 savelij
include macros.a80
include fn_const.a80
include fn_macros.a80
include accel_sp.a80
include ports_sp.a80
include define_sp.a80
include errors_sp.a80
include macros_sp.a80
include dss_sp.a80
include bios_sp.a80
include vers.a80
DEBUG EQU 0
BUF_TOC EQU RESULT + 3000
HDR_FLX "-CDPL",,,FLXMODES.M_ADRORG
PluginEntry:
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 78,79,484,72
W_FILL 4,2,464,10,COLORI.BLUE + COLORP.BLUE
W_TEXT 8,4,COLORI.WHITE + COLORP.BLUE,"SHAOS CD-Player v\{CDVERS}"
W_BUTTONTEXT 468,2,12,10,COLORP.HIGHGRAY,"x"
W_BORDER 8,15,268,38
W_FILL 10,16,264,36,COLORI.BLACK
W_BUTTON 282,15,116,18
W_BUTTON 402,15,36,18
W_BUTTON 442,15,36,18
W_BUTTON 282,35,36,18
W_BUTTON 322,35,36,18
W_BUTTON 362,35,36,18
W_BUTTON 402,35,36,18
W_BUTTON 442,35,36,18
W_HORIZLINE 2,56,480
W_END
call JUMPS.ResFire
CALL SHOW_BUTTON ; ¢ë¢®¤ ¨ª®­®ª ­  ª­®¯ª¨
IF DEBUG
CALL DEBUG_TXTKEYS ; ®â« ¤®ç­ë© ⥪áâ
ENDIF
call CDinit ; ¯®¨áª Audio-CD ¨ ¨­¨â
call BIGDIGITSALL
plugin_loop: LD HL,FLAG
BIT B_RDUPDATE,(HL)
JR NZ,.L2
; ¯¥à¥ç¨â뢠¥¬ ⥪ã饥 ¯®«®¦¥­¨¥ á ãç¥â®¬ ०¨¬®¢
SET B_RDUPDATE,(HL)
BIT B_PAUSE,(HL)
JR NZ,.L3
BIT B_TRAY,(HL)
JR NZ,.L4
BIT B_PLAY,(HL)
CALL NZ,RDSUBCHAN ; ¨«¨ ç¨â ¥¬ ⥪ã饥 ¢à¥¬ï ¥á«¨ â३ § ªàëâ ¨ ०¨¬ ¯«¥©
CALL UPDATE_CURRTRACK ; ®¡­®¢«¥­¨¥ áâப¨ ¤«ï ¢ë¢®¤ 
.L4 LD HL,(APCMD.PLAY_MSF + 6) ; ¢à¥¬ï ª®­æ  ¤¨áª 
LD DE,(RESULT + 9) ; ⥪ã饥 ¢à¥¬ï
AND A
SBC HL,DE
CALL Z,CDSTOP ; ¯à¨­ã¤¨â¥«ì­ë© á⮯ ¥á«¨ ª®­¥æ ¤¨áª 
JR .L3
; ¯¥à¥à¨á®¢ë¢ ¥¬ ⥪ãéãî ¯®§¨æ¨î ¨£à ­¨ï
.L2 RES B_RDUPDATE,(HL)
BIT B_TRAY,(HL)
CALL Z,BIGDIGITSALL ; ¨«¨ ¢ë¢®¤¨¬ ­  íªà ­
; ®á­®¢­®© 横« ®¯à®á  ã¯à ¢«¥­¨ï
.L3 ld ix,PluginMouseTab
call JUMPS.TestCoords
SPDSS DSSF.SCANKEY
jr z,plugin_loop
ld a,b
or a
jr nz,plugin_loop
ld a,e
CALL CHECKHOTKEYS ; ¯à®¢¥àª  å®âª¥¥¢ ¯® ᯨáªã
JR NC,plugin_loop
.L1 cp 0x1B
jr z,PluginExit
cp 0x0D
jr nz,plugin_loop
PluginExit:
CALL RESTORE_STATE
WINDOWCLOSE
or a ; cf = 0
ret
; hl - bitmap 32x16 for 16-color mode
; ix,iy - coords (320x256)
show: di
GETPORT WINSP.CPU0
PUSH AF
GETPORT WINSP.Y_PORT
PUSH AF
SETPORT WINSP.CPU0,0x50
push ix
pop de
LD C,IYL
ld b,16
.L1: ld a,c
SETPORT WINSP.Y_PORT,,0
push de
ACCEL ACCELCMD.SET_BUFFER
ld a,16
ACCEL ACCELCMD.COPY
ld a,(hl)
ld (de),a
ACCEL ACCELCMD.OFF
ld de,16
add hl,de
pop de
inc c
dec b
jp nz,.L1
POP AF
SETPORT WINSP.Y_PORT,,0
POP AF
SETPORT WINSP.CPU0,,0
ei
ret
; a - digit
; ix,iy - coords (320x256)
showd: rlca
ld e,0
ld d,a
ld hl,digit0
add hl,de
call show
ld de,16
add iy,de
jp show
; ¯®ª § ­®¬¥à  â४  ¨ ¢à¥¬¥­¨ ¯à®¨£à뢠­¨ï ªàã¯­ë¬ èà¨ä⮬
BIGDIGITSALL: LD HL,(Digits)
LD (DigitsNone),HL ; ª®¯¨à®¢ ­¨¥ ­®¬¥à  â४ 
LD HL,FLAG
BIT B_PAUSE,(HL)
LD DE,Digits ; ¯® 㬮«ç ­¨î ¢á¥£¤  æ¨äàë
JR Z,.L3
; áç¥â稪 ¤«ï ¬®à£ ­¨ï ¢ ¯ ã§¥
LD A,PAUSEDIGITS
.L4 EQU $-1
DEC A
JR NZ,.L5
LD A,PAUSEDIGITS
.L5 LD (.L4),A
JR NZ,.L6
LD A,M_VIEWNONE
XOR (HL)
LD (HL),A
.L6 BIT B_VIEWNONE,(HL)
JR Z,.L3
LD DE,DigitsNone ; ¯ãá⮥ ¢à¥¬ï ¢ ०¨¬¥ ¯ ã§ 
; ¯¥ç âì ⥪ã饣® ­®¬¥à  â४  ¨ ¢à¥¬¥­¨
.L3 EX DE,HL
; HL -  ¤à¥á ¤ ­­ëå ¤«ï ¢ë¢®¤  ⥪饣® â४ /¢à¥¬¥­¨ ¨£à ­¨ï
ld ix,46 ; X
ld c,8 ; ᪮«ìª® ᨬ¢®«®¢ à¨á®¢ âì
.L2 ld iy,97 ; Y
.L1: push bc
push hl
push iy
ld a,(hl)
call showd
ld bc,16
add ix,bc
pop iy
pop hl
pop bc
inc hl
dec c
jp nz,.L1
ret
CHANGEDISK: LD A,(CDDRIVE)
SPBIOS BIOSF.DRV_RESET
JR NC,.cont
CP ERR_DRV.ATAPI_UnitAttention
JR Z,.drv_change
CP ERR_DRV.ATAPI_NotReady
SCF
RET NZ
LD A,ERR_DSS.NOT_READY
RET
.drv_change: LD A,(CDDRIVE)
CALL SAVE_MEDIA_CHANGED
.cont: CALL INITDISK
RET C
AND A
RET
INITDISK: LD B,4
.CD_I_LP PUSH BC
LD IX,0x0010
LD HL,0x0000
LD DE,RESULT
LD A,(CDDRIVE)
SPBIOS BIOSF.DRV_READ,1
POP BC
JR NC,.CD_I_OK
DJNZ .CD_I_LP
.UNKCD LD A,ERR_DSS.UNKNOWN_FORMAT
SCF
RET
.CD_I_OK LD HL,RESULT
LD A,(HL)
INC HL
DEC A
JR NZ,.UNKCD
LD A,(HL)
INC HL
CP 'C'
JR NZ,.UNKCD
LD A,(HL)
INC HL
CP 'D'
JR NZ,.UNKCD
XOR A
RET
RESTORE_STATE: LD B,1
.set_par: EQU $-1
LD A,(CDDRIVE)
SPBIOS BIOSF.DRV_SET_PAR
RET
SAVE_MEDIA_CHANGED:
SPBIOS BIOSF.DRV_GET_PAR
OR %00000010
LD B,A
LD A,(RESTORE_STATE.set_par)
OR B
LD (RESTORE_STATE.set_par),A
RET
; ¯®¨áª CD-ROM ¨ ¨­¨æ¨ «¨§ æ¨ï
CDinit: LD B,0xC0 - 1
.loop: INC B
LD A,B
CP 0xC4
SCF
JP Z,noCD
PUSH BC
SPBIOS BIOSF.DRV_DETECT
POP BC
JR NC,.found
CP ERR_DRV.ATAPI_MediumError
JR Z,.found
CP ERR_DRV.ATAPI_UnitAttention
JR NZ,.loop
.found: LD A,B
LD (CDDRIVE),A
CALL yesCD0
.CLOSETRAY LD HL,APCMD.CLOSETRAY
CALL SEND_PACKET
CALL CHANGEDISK
LD HL,FLAG
RES B_TRAY,(HL)
.UPDATE_TOC LD HL,RESULT+6
LD (HL),0xAA
LD HL,APCMD.READTOC
CALL SEND_PACKET
LD HL,RESULT-2
LD B,0xFF
LD DE,8
.L1 INC B
ADD HL,DE
LD A,(HL)
CP 0xAA
JR NZ,.L1
LD A,B
LD (TRACKS),A
; ä®à¬¨à®¢ ­¨¥ â ¡«¨æë â४®¢
LD HL,RESULT + 4 + 5
LD A,(RESULT + 3)
LD DE,BUF_TOC + 3 ; ­ã«¥¢®£® ­¥â
.L2 EX AF,AF'
LDI
LDI
LDI
LD A,5
ADD A,L
LD L,A
ADC A,H
SUB L
LD H,A
EX AF,AF'
DEC A
JP NZ,.L2
LD DE,APCMD.PLAY_MSF + 6 ; ª®­¥æ ¤¨áª 
LDI
LDI
LDI
LD A,(TRACKS)
LD HL,TXTTRACKS.DIGITS
CALL A2HALFDEC
LD A,'0'
ADD A,(HL)
LD (HL),A
DEC HL
LD A,'0'
ADD A,(HL)
LD (HL),A
LD HL,TXTTRACKS
LD DE,360
LD BC,140
LD A,COLORP.HIGHGRAY + COLORI.BLUE
CALL JUMPS.PrnTxtLnIFF
LD A,1
LD (CURRENT.TRACK),A
; ®¡­®¢«¥­¨¥ ⥪ã饣® ­®¬¥à  â४  ¨ ¢à¥¬¥­¨ ¨£à ­¨ï ­  íªà ­¥
UPDATE_CURRTRACK
LD A,(CURRENT.TRACK)
LD HL,Digits
CALL A2HALFDEC
LD A,(CURRENT.MINUTE)
LD HL,Digits.MIN
CALL A2HALFDEC
LD A,(CURRENT.SECUND)
LD HL,Digits.SEC
; ª®­¢¥àá¨ï ç¨á«  ¤«ï ¢ë¢®¤  ­  ¤¨á¯«¥©
A2HALFDEC LD BC,10
.L1 INC B
SUB C
JR NC,.L1
DEC B
ADD A,C
LD (HL),B
INC HL
LD (HL),A
RET
IF DEBUG
A2HEX PUSH AF
AND %11110000
RRCA
RRCA
RRCA
RRCA
CALL .L2
LD B,A
POP AF
AND %00001111
.L2 ADD A,'0'
CP '9'+1
RET C
ADD A,7
RET
ENDIF
; CD-ROM ­ ©¤¥­
yesCD0: ld hl,msgY
ld a,COLORP.HIGHGRAY + COLORI.BLUE
jr CDprn
; CD-ROM ­¥ ­ ©¤¥­
noCD: ld hl,msgN
ld a,COLORP.HIGHGRAY + COLORI.RED
CDprn: ld de,84
ld bc,140
JP JUMPS.PrnTxtLnIFF
msgY DZ "CD-ROM is present"
msgN DZ "CD-ROM is absent"
TXTTRACKS DZ "Tracks: 00" ; ª®«¨ç¥á⢮ â४®¢ ­  ¤¨áª¥
.DIGITS EQU $-3
; à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å ¯® â ¡«¨çª¥ ¯®§¨æ¨©
SHOW_BUTTON LD HL,TABLBUTTONS
.L1 LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD A,D
OR E
RET Z
PUSH DE
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD IXH,D
LD IXL,E
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD IYH,D
LD IYL,E
EX (SP),HL
CALL show
POP HL
JR .L1
IF DEBUG
; â ¡«¨æ  ¯®¤áª §®ª ­  å®âª¥¨
DEBUG_TXTKEYS LD HL,DEBUGTABLKEYS
.L1 LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD A,D
OR E
RET Z
PUSH DE
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
INC HL
EX (SP),HL
LD A,COLORP.HIGHGRAY + COLORI.RED
CALL JUMPS.PrnTxtLnIFF
POP HL
JR .L1
ENDIF
; ¯à®¢¥àª  å®âª¥¥¢ ¯® â ¡«¨æ¥
CHECKHOTKEYS LD HL,TABLHOTKEYS
.L1 LD B,(HL)
INC B
DEC B
SCF
RET Z
INC HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
CP B
JR NZ,.L1
PUSH AF
EX DE,HL
CALL JP_HL
POP AF
AND A
RET
JP_HL JP (HL)
; ç⥭¨¥ ⥪ã饣® á®áâ®ï­¨ï ¨£à ­¨ï
RDSUBCHAN LD HL,APCMD.RDSUBCHAN
CALL SEND_PACKET
LD A,(RESULT + 6)
LD (CURRENT.TRACK),A
LD HL,RESULT + 13
LD DE,CURRENT.MINUTE
LDI
LDI
RET
; ãáâ ­®¢ª  ¯®§¨æ¨¨ ¤«ï ¨£à ­¨ï ¢ ¯ ª¥â¥
SETPOS_MSF EXX
LD HL,(CURRENT.TRACK)
LD H,0
LD E,L
LD D,H
ADD HL,HL
ADD HL,DE
LD DE,BUF_TOC
ADD HL,DE
LD DE,APCMD.PLAY_MSF + 3
LDI
LDI
LDI
EXX
RET
; ¯¥à¥¬®âª  ­ § ¤
REWIND LD A,(FLAG)
BIT B_PAUSE,A
RET NZ
BIT B_PLAY,A
RET Z
; ⮫쪮 ¤«ï ०¨¬  ¯«¥©
CALL RDSUBCHAN
LD HL,APCMD.PLAY_MSF + 3
LD DE,(RESULT + 9)
LD A,D
SUB PAUSE
LD D,A
JR NC,.L1
ADD A,60
LD D,A ; ­®¢ë¥ ᥪ㭤ë
DEC E ; ­®¢ë¥ ¬¨­ãâë
.L1 LD (HL),E ; ¬¨­ãâë
INC HL
LD (HL),D ; ᥪ㭤ë
INC HL
LD (HL),0 ; ä३¬
JR CDPLAY.L1
; ¯¥à¥¬®âª  ¢¯¥à¥¤
FORWARD LD A,(FLAG)
BIT B_PAUSE,A
RET NZ
BIT B_PLAY,A
RET Z
; ⮫쪮 ¤«ï ०¨¬  ¯«¥©
CALL RDSUBCHAN
LD HL,APCMD.PLAY_MSF + 3
LD DE,(RESULT + 9)
LD A,D
ADD A,PAUSE
LD D,A
CP 60
JR C,REWIND.L1
SUB 60
LD D,A ; ­®¢ë¥ ᥪ㭤ë
INC E ; ­®¢ë¥ ¬¨­ãâë
JR REWIND.L1
; ¯à¥¤ë¤ã騩 â४
PREV_TRACK LD HL,CURRENT.TRACK
LD A,(HL)
DEC A
RET Z
DEC (HL)
JR NEXT_TRACK.L1
; á«¥¤ãî騩 â४
NEXT_TRACK LD HL,CURRENT.TRACK
LD A,(TRACKS)
CP (HL)
RET Z
INC (HL)
.L1 LD HL,0
LD (CURRENT.MINUTE),HL
CALL SETPOS_MSF ; ãáâ ­®¢ª  ¯®§¨æ¨¨ ¢ ¯ ª¥â¥
CALL UPDATE_CURRTRACK ; ®¡­®¢«¥­¨¥ áâப¨ â४  ¨ ¢à¥¬¥­¨
CALL BIGDIGITSALL ; à¨á®¢ ­¨¥ ­  íªà ­ áâப¨ â४  ¨ ¢à¥¬¥­¨
LD HL,FLAG
BIT B_PLAY,(HL) ; ०¨¬ ¯«¥©?
RET Z ; ¢ë室 ¥á«¨ ­¥â
BIT B_PAUSE,(HL) ; ०¨¬ ¯ ã§ë?
RET NZ ; ¢ë室 ¥á«¨ ¤ 
JR CDPLAY.L1 ; ¨­ ç¥ § ¯ã᪠¥¬ ¯«¥© ¤«ï ­®¢®£® â४ 
; ¨£à âì â४
CDPLAY: LD HL,FLAG
BIT B_PAUSE,(HL)
JR NZ,CDPAUSE.PAUSEON ; ¥á«¨ ¨§ ०¨¬  ¯ ã§ , á­ ç «  á¡à®á ०¨¬ 
BIT B_PLAY,(HL)
RET NZ ; ¥á«¨ ¨§ ०¨¬  ¯«¥©, â® ¢ë室¨¬
.L2 SET B_PLAY,(HL)
CALL SETPOS_MSF
.L1 LD HL,APCMD.PLAY_MSF
JP SEND_PACKET
CDPAUSE LD HL,FLAG
BIT B_PLAY,(HL)
RET Z ; ¥á«¨ á⮯ â® ¯ ã§ã ¨£­®à¨¬
BIT B_PAUSE,(HL)
JR NZ,.PAUSEON
; ¢ª«î祭¨¥ ०¨¬  ¯ ã§ 
SET B_PAUSE,(HL)
CALL RDSUBCHAN
LD HL,(RESULT + 9)
LD (CURRENT.PAUSE_POS),HL
LD HL,APCMD.PAUSE
JP SEND_PACKET
; ¢ëª«î祭¨¥ ०¨¬  ¯ ã§ 
.PAUSEON RES B_PAUSE,(HL)
RES B_VIEWNONE,(HL)
BIT B_PAUSENEW,(HL)
RES B_PAUSENEW,(HL)
JP Z,CDPLAY.L1
LD HL,(CURRENT.PAUSE_POS)
LD (APCMD.PLAY_MSF + 3),HL
JR CDPLAY.L1
; ¯®«­ ï ®áâ ­®¢ª 
CDSTOP: LD HL,FLAG
RES B_PLAY,(HL)
RES B_PAUSE,(HL)
RES B_VIEWNONE,(HL)
LD A,1
LD (CURRENT.TRACK),A
LD HL,0
LD (CURRENT.MINUTE),HL
CALL SETPOS_MSF
CALL UPDATE_CURRTRACK
CALL BIGDIGITSALL
; ª®¬ ­¤  á⮯
CD_APSTOP LD HL,APCMD.STOP
; ¯®á뫪  ATAPI ¯ ª¥â 
SEND_PACKET LD DE,RESULT
LD A,0
CDDRIVE EQU $-1
SPBIOS BIOSF.DRV_EXTENDED,DRV_EXTENDED.ATAPI_Custom_PCMD
RET
; ®âªàë⨥/§ ªàë⨥ âà¥ï
CDEJECT: CALL CDSTOP
LD HL,FLAG
BIT B_TRAY,(HL)
SET B_TRAY,(HL)
JP NZ,CDinit.CLOSETRAY ; § ªàë⨥ ¨ २­¨â
; ¨­ ç¥ ®âªàë⨥ âà¥ï
LD HL,APCMD.OPENTRAY
CALL SEND_PACKET
LD HL,BUF_TOC
LD DE,BUF_TOC + 1
LD BC,99 * 3
LD (HL),0
LDIR
RET
IF DEBUG
TXT
.D1 DZ "1"
.D2 DZ "2"
.D3 DZ "3"
.D4 DZ "4"
.D5 DZ "5"
.D6 DZ "6"
.D7 DZ "7"
.D8 DZ "8"
DEBUGTABLKEYS DW TXT.D1,363,95
DW TXT.D2,483,95
DW TXT.D3,523,95
DW TXT.D4,363,115
DW TXT.D5,403,115
DW TXT.D6,443,115
DW TXT.D7,483,115
DW TXT.D8,523,115
DW 0
ENDIF
; â ¡«¨æ  ¨ª®­®ª ¤«ï ª­®¯®ª
TABLBUTTONS DW cd_play,201,95
DW cd_paus,241,95
DW cd_stop,261,95
DW cd_ll,181,115
DW cd_l,201,115
DW cd_r,221,115
DW cd_rr,241,115
DW cd_ejec,261,115
DW 0
; å®âª¥¨
TABLHOTKEYS DB '1'
DW CDPLAY ; ¯«¥©
DB '2'
DW CDPAUSE ; ¯ ã§ 
DB '3'
DW CDSTOP ; á⮯
DB '4'
DW PREV_TRACK ; ¯à¥¤ë¤ã騩 â४
DB '5'
DW REWIND ; ¯¥à¥¬®âª  ­ § ¤
DB '6'
DW FORWARD ; ¯¥à¥¬®âª  ¢¯¥à¥¤
DB '7'
DW NEXT_TRACK ; á«¥¤ãî騩 â४
DB '8'
DW CDEJECT ; ®âªàë⨥/§ ªàë⨥ âà¥ï
DB 0
; ⥪ã騩 â४ ¨ ⥪ã饥 ¢à¥¬ï â४ 
Digits DB 0x00,0x00,0x0B
.MIN DB 0x00,0x00,0x0A
.SEC DB 0x00,0x00
; ¯ãá⮥ ¢à¥¬ï ¤«ï ¬®à£ ­¨ï ¢ ¯ ã§¥
DigitsNone DB 0x0B,0x0B,0x0B,0x0B,0x0B,0x0A,0x0B,0x0B
; â ¡«¨æ  ¤«ï ¬ëè¨
PluginMouseTab: dw 546,558, 81, 91,%0000000000100001,0,PluginExit,PluginExit
dw 360,476, 94,112,%0000000000000001,0,CDPLAY,0
dw 480,516, 94,112,%0000000000000001,0,CDPAUSE,0
dw 520,556, 94,112,%0000000000000001,0,CDSTOP,0
dw 360,396,114,132,%0000000000000001,0,PREV_TRACK,0
dw 400,436,114,132,%0000000000000001,0,REWIND,0
dw 440,476,114,132,%0000000000000001,0,FORWARD,0
dw 480,516,114,132,%0000000000000001,0,NEXT_TRACK,0
dw 520,556,114,132,%0000000000000001,0,CDEJECT,0
dw 0x8000
APCMD
; 00 01 02 03 04 05 06 07 08 09 0A 0B
.STOP DB 0x4E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
.PAUSE DB 0x4B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
; SM SS SF EM ES EF
.PLAY_MSF DB 0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; 3-5 START MSF, 6-8 END MSF
.READTOC DB 0x43,0x02,0x00,0x00,0x00,0x00,0x01,0x03,0x24,0x00,0x00,0x00
.CLOSETRAY DB 0x1B,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00
.OPENTRAY DB 0x1B,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00
.RDSUBCHAN DB 0x42,0x02,0x40,0x01,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00
include icons.a80
include digits.a80
FLAG DB 0
BITMASK TRAY, 7 ; 1-â३ ®âªàëâ, 0-â३ § ªàëâ
BITMASK RDUPDATE, 6 ; 1-®¡­®¢«¥­¨¥ ¢à¥¬¥­¨,0-ç⥭¨¥ ¢à¥¬¥­¨
BITMASK PAUSE, 5 ; 1-०¨¬ ¯ ã§ë,0-­¥â
BITMASK PLAY, 4 ; 1-०¨¬ ¯«¥©  ªâ¨¢¥­,0-­¥â
BITMASK PAUSENEW, 3 ; 1-¢ ०¨¬¥ ¯ ã§  ­ ¦ â ¯¥à¥å®¤ ­  ¤à㣮© â४
BITMASK VIEWNONE, 2 ; 1-¯ãáâë¥ æ¨äàë,0-­®à¬ «ì­ë¥
CURRENT ; ­®¬¥à â४  ¨ ¢à¥¬ï ¤«ï ¢ë¢®¤  ­  íªà ­
.TRACK DB 0 ; ⥪ã騩 â४
.MINUTE DB 0 ; ⥪ãé ï ¬¨­ãâ 
.SECUND DB 0 ; ⥪ãé ï ᥪ㭤 
.PAUSE_POS DW 0 ; ⥪ãé ï ¯®§¨æ¨ï ­  ¬®¬¥­â ­ ¦ â¨ï ¯ ã§ë
TRACKS DB 0 ; ª®«¨ç¥á⢮ â४®¢ ­  ¤¨áª¥
; ­ ç «® ¡ãä¥à  ¯®«ã祭¨ï १ã«ìâ â ¢ë¯®«­¥­¨ï ATAPI ¯ ª¥â 
RESULT DB 0 ; १ã«ìâ â ¢ë¯®«­¥­¨ï ATAPI ª®¬ ­¤ë