- плагин доделан, описание/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.
		
			
				
	
	
		
			718 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			718 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | ||
| ; 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 ª®¬ ¤ë
 |