1 CLR ›10 REM *** CD Audio player 0.01 ***›20 DDEVIC=768:DUNIT=769:DCOMND=770›30 DSTATS=771:DBUFLO=772:DBUFHI=773›40 DTIMO=774:DBYTLO=776:DBYTHI=777›50 DAUX1=778:DAUX2=779›55 ROWCRS=54:COLCRS=55›60 ROW=64:REM Read (This is CD_ROM)›62 CMDLEN=6:REM Command lenght (6,10,12)›64 CI=0:MSF=1:INDEX2PLAY=1:OLDSTATUS=-1:OLDSTATUS2=-1:OLDQCTRL=-1:OLDTRACK2=0›66 SCREENONDISPLAY=1:MAXSCREEN=4›68 INFO=1:REM Temp Value›70 DIM KEY$(1),TOC$(198),ENTRY$(2),BUFFER$(804)›75 DBUFR=ADR(BUFFER$)›80 BRUN "D1:MSC:BBAS040.COM"›90 ? "}":POKE 752,1:REM  Îï ãõòóïò ›95 MMC=0:REM  Îï ÍÍàóõððïòô ùåô¡ ›100 EXEC CMDDCB›110 EXEC SETUP_SUB›120 EXEC SETUP_CMDS›130 EXEC FIND_CD›140 EXEC MMC_DETECT›300 EXEC READ_TOC›350 IF T=0›400 EXEC TOCOUT›410 ELSE ›420 T=0›430 ENDIF ›500 EXEC MENU›19996 ? "}";"Bye"›19997 POKE 752,0:REM  ó÷éôãè ãõòóïò âáãë ïî ›19998 END ›19999 ------------------------------›26900 PROC STOP›26905 SSU=PEEK(1607)›26910 POKE 1607,PEEK(1607)&252›26920 EXEC CDOPEN›26930 POKE 1607,SSU›26940 CURRENTTRACK=0›26950 EXEC DASH_DISPLAY›26998 ENDPROC ›26999 ------------------------------›27000 PROC SELECT_SCREEN›27005 REM POSITION 28,16:? "SEL_SCR IN "›27010 IF MAXSCREEN=1›27015 ELSE ›27020 IF KEY$="W"›27025 SCREENONDISPLAY=SCREENONDISPLAY+1›27030 IF SCREENONDISPLAY>MAXSCREEN THEN SCREENONDISPLAY=SCREENONDISPLAY-MAXSCREEN›27035 ELSE ›27040 SCREENONDISPLAY=SCREENONDISPLAY-1›27045 IF SCREENONDISPLAY=0 THEN SCREENONDISPLAY=MAXSCREEN›27050 ENDIF ›27055 EXEC SCREEN_CHANGE›27060 ENDIF ›27095 REM POSITION 28,16:? "SEL_SCR OUT"›27098 ENDPROC ›27099 ------------------------------›27100 PROC SCREEN_CHANGE›27105 REM POSITION 28,16:? "SCR_CHA IN "›27120 IF MAXSCREEN=1›27125 FIRSTONDISPLAY=FIRSTTRACK›27130 LASTONDISPLAY=LASTTRACK›27135 ELSE ›27140 IF SCREENONDISPLAY=1›27145 FIRSTONDISPLAY=FIRSTTRACK›27150 LASTONDISPLAY=FIRSTTRACK+35›27155 ELSE ›27160 IF MAXSCREEN=2›27165 FIRSTONDISPLAY=FIRSTTRACK+36›27170 LASTONDISPLAY=LASTTRACK›27175 ELSE ›27180 IF SCREENONDISPLAY=2›27185 FIRSTONDISPLAY=FIRSTTRACK+36›27190 LASTONDISPLAY=FIRSTTRACK+71›27195 ELSE ›27200 FIRSTONDISPLAY=FIRSTTRACK+72›27205 LASTONDISPLAY=LASTTRACK›27210 ENDIF ›27215 ENDIF ›27220 ENDIF ›27225 ENDIF ›27250 REM IF OLDDISPLAY<>SCREENONDISPLAY›27252 REM OLDDISPLAY=SCREENONDISPLAY›27254 EXEC SHOWTOC›27256 ENDIF ›27295 REM POSITION 28,16:? "SCR_CHA OUT"›27298 ENDPROC ›27299 ------------------------------›27300 PROC DASH_DISPLAY›27305 REM POSITION 28,16:? "DSH_DIS IN "›27310 IF CURRENTTRACK<>0 THEN DASHONTRACK=CURRENTTRACK›27320 IF (MAXSCREEN>1 AND CURRENTTRACK>36)›27325 WHILE DASHONTRACK>36›27330 DASHONTRACK=DASHONTRACK-36›27340 WEND ›27350 ENDIF ›27352 REM POSITION 2,20:? "AS=";AUDIOSTATUS:POSITION 10,20:? "OS1=";OLDSTATUS:POSITION 18,20:? "OS2=";OLDSTATUS2›27353 REM POSITION 2,21:? "CT=";CURRENTTRACK:POSITION 10,21:? "OT1=";OLDTRACK:POSITION 18,21:? "OT2=";OLDTRACK2›27354 REM POSITION 26,21:? "DT=";DASHONTRACK:POSITION 26,20:? "ODP=";OLDDISPLAY:POSITION 34,20:? "SOD=";SCREENONDISPL›27355 IF (DASHONTRACK<>OLDTRACK2):REM OR OLDDISPLAY=SCREENONDISPLAY:REM AND AUDIOSTATUS=17)›27360 IF (AUDIOSTATUS>0 AND HELP=0)›27370 IF (AUDIOSTATUS<21 AND CURRENTTRACK<170):REM AND OLDTRACK2>0)›27380 SCREENSTART=DPEEK(88)+163›27390 VERT_POS1=(TRUNC((DASHONTRACK-1)/4))›27395 HOR_POS1=(DASHONTRACK-(1+(VERT_POS1)*4))*10›27400 POSITION HOR_POS1+3,VERT_POS1+4›27405 ? "_"›27410 DPOKE SCREENSTART+(DASHONTRACK-1)*10+6,63›27415 ENDIF ›27420 IF (OLDTRACK2>0 AND OLDTRACK2<100)›27425 VERT_POS2=(TRUNC((OLDTRACK2-1)/4))›27430 HOR_POS2=(OLDTRACK2-(1+(VERT_POS2)*4))*10›27435 POSITION HOR_POS2+3,VERT_POS2+4›27440 ? " "›27445 DPOKE SCREENSTART+(OLDTRACK2-1)*10+6,0›27450 ENDIF ›27460 ENDIF ›27470 IF AUDIOSTATUS<21 THEN OLDTRACK2=DASHONTRACK›27480 ENDIF ›27495 REM POSITION 28,16:? "DSH_DIS OUT"›27498 ENDPROC ›27499 ------------------------------›27500 PROC PLAY_AUDIO_MSF›27505 REM POSITION 28,16:? "PLAYMSF IN "›27510 EXEC CMDDCB›27520 POKE DAUX1,123›27530 POKE DAUX2,6›27540 DPOKE DBYTLO,0›27550 POKE 1659,CDID›27560 EXEC GO_ML›27570 EXEC CHECK›27595 REM POSITION 28,16:? "PLAYMSF OUT"›27598 ENDPROC ›27599 ------------------------------›27600 PROC SCAN_NO_MMC›27605 REM POSITION 28,16:? "SCANMMC IN "›27610 EXEC CURTRACK›27620 IF AUDIOSTATUS=17›27630 HOURSPAST=PEEK(DBUFR+8)›27635 MINUTESPAST=PEEK(DBUFR+9)›27640 SECONDSPAST=PEEK(DBUFR+10)›27650 IF KEY$="*"›27660 SECONDSPAST=SECONDSPAST+3›27670 IF SECONDSPAST>59›27675 SECONDSPAST=SECONDSPAST-60›27680 MINUTESPAST=MINUTESPAST+1›27685 IF MINUTESPAST>59 THEN MINUTESPAST=MINUTESPAST-60:HOURSPAST=HOURSPAST+1›27690 ENDIF ›27700 ELSE ›27710 SECONDSPAST=SECONDSPAST-3›27720 IF SECONDSPAST<0›27725 SECONDSPAST=SECONDSPAST+60›27730 MINUTESPAST=MINUTESPAST-1›27735 IF MINUTESPAST<0 THEN MINUTESPAST=MINUTESPAST+60:HOURSPAST=HOURSPAST-1›27740 IF HOURSPAST<0 THEN HOURSPAST=0›27745 ENDIF ›27750 ENDIF ›27755 MINUTES=MINUTESPAST+HOURSPAST*60›27765 SECONDS=SECONDSPAST›27770 POKE 1664,MINUTES›27775 POKE 1665,SECONDS›27780 EXEC PLAY_AUDIO_MSF›27790 ENDIF ›27795 REM POSITION 28,16:? "SCANMMC OUT"›27798 ENDPROC ›27799 ------------------------------›27800 PROC ISRC›27801 REM POSITION 28,16:? "ISRC IN "›27803 POKE 1612,MSF*2›27804 POKE 1613,64›27805 POKE 1614,3›27806 POKE 1617,CURRENTTRACK›27810 EXEC READ_SUBCHAN›27815 IF PEEK(DBUFR+8)>127 AND PEEK(DBUFR+5)=48›27820 FOR X=0 TO 11›27830 ? CHR$(PEEK(DBUFR+9+X));›27840 NEXT X›27841 FOR X=0 TO 9›27842 ? " ";PEEK(DBUFR+X);›27843 NEXT X›27845 ENDIF ›27895 POKE 1614,1›27897 REM POSITION 28,16:? "ISRC OUT"›27898 ENDPROC ›27899 ------------------------------›27900 PROC MCN›27905 REM POSITION 28,16:? "MCN IN "›27915 IF AUDIOSTATUS<20›27920 POKE 1612,MSF*2›27925 POKE 1613,64›27930 POKE 1614,2›27935 POKE 1617,0›27940 EXEC READ_SUBCHAN›27945 IF PEEK(DBUFR+8)>127›27950 FOR X=0 TO 12›27955 ? CHR$(PEEK(DBUFR+9+X));›27960 NEXT X›27965 ENDIF ›27980 POKE 1614,1›27985 ENDIF ›27995 REM POSITION 28,16:? "MCN OUT"›27998 ENDPROC ›27999 ------------------------------›28000 PROC CHANGE_INDEX›28003 REM POSITION 28,16:? "CHN_IND IN "›28005 EXEC CURTRACK›28010 IF KEY$="-" AND CURRENTINDEX>1›28020 INDEX2PLAY=CURRENTINDEX-1›28025 TRACK2PLAY=CURRENTTRACK›28030 EXEC PLAYTRACK›28040 ENDIF ›28050 IF KEY$="="›28060 INDEX2PLAY=CURRENTINDEX+1›28065 TRACK2PLAY=CURRENTTRACK›28070 EXEC PLAYTRACK›28080 ENDIF ›28095 REM POSITION 28,16:? "CHN_IND OUT"›28098 ENDPROC ›28099 ------------------------------›28100 PROC SELECT_A_TRACK›28105 REM POSITION 28,16:? "SEL_TRK IN "›28110 IF LASTTRACK<10›28115 POSITION 9,22:? KEY$›28120 TRACK2PLAY=VAL(KEY$)›28125 INDEX2PLAY=1›28130 ELSE ›28135 POSITION 8,22:? VAL(KEY$);"_"›28140 ENTRY$(1,1)=KEY$›28145 IF VAL(ENTRY$(1,1))=TRUNC(LASTTRACK/10)›28150 REPEAT ›28160 KEY$=INKEY$›28170 UNTIL KEY$>CHR$(47) AND KEY$CHR$(47) AND KEY$AUDIOSTATUS)›28320 POSITION 2,18›28330 ON AUDIOSTATUS-16 EXEC IN_PROGRESS,PAUSED,COMPLETED,ERROR,NOSTATUS›28340 OLDSTATUS=AUDIOSTATUS›28350 ENDIF ›28395 REM POSITION 28,16:? "DSP_AS OUT"›28398 ENDPROC ›28399 ------------------------------›28400 PROC IN_PROGRESS›28405 ? "Audio Play in progress "›28410 ENDPROC ›28419 ------------------------------›28420 PROC PAUSED›28425 ? "Audio Play PAUSED "›28430 ENDPROC ›28439 ------------------------------›28440 PROC COMPLETED›28445 ? "Audio Play successfully completed"›28447 PAUSE 45›28450 ENDPROC ›28459 ------------------------------›28460 PROC ERROR›28465 ? "Audio Play stopped due to error "›28470 ENDPROC ›28479 ------------------------------›28480 PROC NOSTATUS›28485 ? "No current audio status "›28490 ENDPROC ›28499 ------------------------------›28500 PROC MMC_DETECT›28505 REM POSITION 28,16:? "MMC_DET IN "›28510 EXEC CMDDCB›28520 POKE DAUX1,85›28530 POKE DAUX2,6›28540 POKE 1621,CDID›28550 DPOKE DBYTLO,256›28560 EXEC GO_ML›28570 EXEC CHECK›28575 IF STAT=1 THEN MMC=1›28595 REM POSITION 28,16:? "MMC_DET OUT"›28598 ENDPROC ›28599 ------------------------------›28600 PROC TRACK_INDEX›28605 REM POSITION 28,16:? "TRK_IND IN "›28610 POSITION 2,22›28620 ? " "›28630 REM POSITION 2,22›28640 REM ? "TRACK ";›28645 POSITION 8,22›28650 IF CURRENTTRACK<10 THEN ? " ";›28660 ? CURRENTTRACK›28665 POSITION 19,22›28670 REM POSITION 13,22›28680 REM ? "INDEX ";›28690 IF CURRENTINDEX<10 THEN ? " ";›28700 IF CURRENTINDEX>0 THEN ? CURRENTINDEX›28795 REM POSITION 28,16:? "TRK_IND OUT"›28798 ENDPROC ›28799 ------------------------------›28800 PROC SHOWTOC›28801 REM POSITION 28,16:? "SHW_TOC IN "›28802 FOR LINE=4 TO 14›28804 POSITION 1,LINE:? " "›28806 NEXT LINE›28808 IF LASTTRACK>0›28810 TITLE=0›28820 POKE 82,1›28830 POSITION 1,4›28845 FOR X=FIRSTONDISPLAY*2-1 TO LASTONDISPLAY*2 STEP 2›28850 Y=(X+1)/2›28860 IF NOT TOC$(X,X+1)="DT"›28870 IF Y<10 THEN ? " ";›28880 ? Y;" ";›28890 IF ASC(TOC$(X,X))<10 THEN ? "0";›28900 ? ASC(TOC$(X,X));›28910 ? ":";›28915 IF ASC(TOC$(X+1,X+1))<10 THEN ? "0";›28920 ? ASC(TOC$(X+1,X+1));›28930 ELSE ›28932 IF Y<10 THEN ? " ";›28935 ? Y;" DATA ";›28940 ENDIF ›28945 IF TITLE<3 THEN ? " ";›28950 TITLE=TITLE+1:IF TITLE=4 THEN TITLE=0:? CHR$(155);›28960 NEXT X›28970 POKE 82,2›28980 ? CHR$(155)›28990 ENDIF ›28995 IF (MAXSCREEN>1 AND SCREENONDISPLAY<3) THEN POSITION 10,14:? LASTTRACK;" Tracks on this CD"›28997 REM POSITION 28,16:? "SHW_TOC OUT"›28998 ENDPROC ›28999 ------------------------------›29000 PROC PLAYPAUSE›29003 REM POSITION 28,16:? "PLY_PAU IN "›29005 EXEC CURTRACK›29010 AUDIOSTATUS=PEEK(DBUFR+1)›29015 IF AUDIOSTATUS=18 OR AUDIOSTATUS=19 OR AUDIOSTATUS=21›29020 RESUME=1:POKE 1587,RESUME›29025 IF AUDIOSTATUS<>18›29030 TRACK2PLAY=1›29035 INDEX2PLAY=1›29040 EXEC PLAYTRACK›29050 ENDIF ›29060 ELSE ›29070 IF AUDIOSTATUS=17›29080 RESUME=0:POKE 1587,RESUME›29090 ENDIF ›29100 ENDIF ›29120 EXEC CMDDCB›29130 POKE DAUX1,41›29140 POKE DAUX2,6›29150 DPOKE DBYTLO,0›29160 POKE 1577,CDID›29170 EXEC GO_ML›29180 EXEC CHECK›29195 REM POSITION 28,16:? "PLY_PAU OUT"›29198 ENDPROC ›29199 ------------------------------›29200 PROC READ_SUBCHAN›29205 REM POSITION 28,16:? "REA_SUB IN "›29210 EXEC CMDDCB›29220 POKE DAUX1,73›29230 POKE DAUX2,6›29240 DPOKE DBYTLO,SCDFC:REM SubChannel data format code›29250 POKE 1609,CDID›29260 EXEC GO_ML›29270 EXEC CHECK›29295 REM POSITION 28,16:? "REA_SUB OUT"›29298 ENDPROC ›29299 ------------------------------›29300 PROC PLAYTRACK›29305 REM POSITION 28,16:? "PLA_TRK IN "›29310 POKE 1595,TRACK2PLAY›29315 POKE 1596,INDEX2PLAY›29320 POKE 1598,LASTTRACK›29330 EXEC CMDDCB›29340 POKE DAUX1,53›29350 POKE DAUX2,6›29360 DPOKE DBYTLO,0›29370 POKE 1589,CDID›29380 EXEC GO_ML›29385 EXEC CHECK›29390 POKE 1596,1›29395 REM POSITION 28,16:? "PLA_TRK OUT"›29398 ENDPROC ›29399 ------------------------------›29400 PROC CURTRACK›29401 REM POS. 28,16:?"CUR_TRK IN "›29410 POKE 1612,MSF*2›29420 POKE 1613,64:REM bit 6 for Sub-Channel Q›29430 POKE 1614,1:REM $01 for CDROM current position›29440 SCDFC=48›29450 EXEC READ_SUBCHAN›29455 LENDAT=PEEK(DBUFR+3)+PEEK(DBUFR+2)*256:REM Maybe I need this later›29460 QADRCTRL=PEEK(DBUFR+5)›29465 QCTRL=QADRCTRL&15›29470 IF (OLDQCTRL<>QCTRL)›29475 POSITION 2,16›29480 IF QCTRL&8=0›29485 ? "2 Channel Audio"›29490 ELSE ›29495 ? "4 Channel Audio"›29500 ENDIF ›29510 IF QCTRL&2=0›29515 ? "Digital copy prohibited"›29520 ELSE ›29525 ? "Digital copy permitted "›29530 ENDIF ›29532 OLDQCTRL=QCTRL›29533 ENDIF ›29535 CURRENTTRACK=PEEK(DBUFR+6)›29540 CURRENTINDEX=PEEK(DBUFR+7)›29543 AUDIOSTATUS=PEEK(DBUFR+1)›29545 IF (AUDIOSTATUS<21 AND AUDIOSTATUS>0)›29546 IF (OLDTRACK<>CURRENTTRACK OR OLDINDEX<>CURRENTINDEX)›29548 POSITION 2,22›29549 REM POSITION 8,22›29550 ? "TRACK ";›29551 IF CURRENTTRACK<10 THEN ? " ";›29552 IF CURRENTTRACK<100 THEN ? CURRENTTRACK›29553 POSITION 13,22›29554 REM POSITION 19,22›29555 ? "INDEX ";›29556 IF CURRENTINDEX<10 THEN ? " ";›29557 IF CURRENTINDEX>0 THEN ? CURRENTINDEX›29560 OLDTRACK=CURRENTTRACK›29565 OLDINDEX=CURRENTINDEX›29568 ENDIF ›29570 ENDIF ›29575 POSITION 27,22›29580 HOURSPAST=PEEK(DBUFR+12)›29585 MINUTESPAST=PEEK(DBUFR+13)›29590 SECONDSPAST=PEEK(DBUFR+14)›29595 AUDIOSTATUS=PEEK(DBUFR+1)›29600 IF AUDIOSTATUS<21 AND AUDIOSTATUS>16›29605 IF AUDIOSTATUS<>18 OR (AUDIOSTATUS=18 AND OLDSTATUS2=-1)›29610 IF HOURSPAST=1 THEN ? "h01"›29620 POSITION 31,22›29625 ? "m";›29630 IF MINUTESPAST<10 THEN ? "0";›29635 ? MINUTESPAST;" ";›29640 ? "s";›29645 IF SECONDSPAST<10 THEN ? "0";›29650 ? SECONDSPAST›29652 OLDSTATUS2=AUDIOSTATUS›29655 ENDIF ›29660 ELSE ›29665 IF OLDSTATUS2<>AUDIOSTATUS›29670 ? " "›29675 OLDSTATUS2=AUDIOSTATUS›29680 ENDIF ›29690 ENDIF ›29695 REM EXEC DASH_DISPLAY›29696 REM POSITION 28,16:? "CUR_TRK OUT"›29698 ENDPROC ›29699 ------------------------------›29700 PROC PREVTRACK›29705 REM POSITION 28,16:? "PREVTRK IN "›29710 EXEC CURTRACK›29715 IF CURRENTTRACK<>0›29720 IF FIRSTTRACK=CURRENTTRACK›29723 POSITION 2,22›29725 FOR FLASHLOOP=0 TO 3›29730 ? "This is the first track! ":PAUSE 10›29735 ? "Ôèéó éó ôèå æéòóô ôòáãë¡ ":PAUSE 10›29740 NEXT FLASHLOOP›29750 EXEC TRACK_INDEX›29760 ELSE ›29770 TRACK2PLAY=CURRENTTRACK-1›29780 EXEC PLAYTRACK›29790 ENDIF ›29795 ENDIF ›29797 REM POSITION 28,16:? "PREVTRK OUT"›29798 ENDPROC ›29799 ------------------------------›29800 PROC NEXTTRACK›29805 REM POSITION 28,16:? "NEXTTRK IN "›29810 EXEC CURTRACK›29820 IF LASTTRACK=CURRENTTRACK›29823 POSITION 2,22›29825 FOR FLASHLOOP=0 TO 3›29830 ? "This is the last track! ":PAUSE 10›29835 ? "Ôèéó éó ôèå ìáóô ôòáãë¡ ":PAUSE 10›29840 NEXT FLASHLOOP›29850 EXEC TRACK_INDEX›29860 ELSE ›29870 TRACK2PLAY=CURRENTTRACK+1›29880 EXEC PLAYTRACK›29890 ENDIF ›29895 REM POSITION 28,16:? "NEXTTRK OUT"›29998 ENDPROC ›29999 ------------------------------›30000 PROC GO_ML›30010 X=USR(1536)›30020 ENDPROC ›30099 ------------------------------›30100 PROC TOCOUT›30105 POSITION 28,16:? "Please Wait"›30110 LASTTRACK=PEEK(DBUFR+3)›30120 FIRSTTRACK=PEEK(DBUFR+2)›30200 IF FIRSTTRACK=LASTTRACK›30201 POSITION 6,12:? "disk consists of one track"›30202 PAUSE 20›30203 ENDIF ›30204 TITL=0›30205 FOR DAT=FIRSTTRACK TO LASTTRACK›30206 TRACKTYPE=PEEK(DBUFR+5+(8*(DAT-1)))›30207 TRACKTYPE=TRACKTYPE&4›30208 IF TRACKTYPE<>4›30209 SECONDS=PEEK(DBUFR+10+(8*DAT))-PEEK(DBUFR+2+(8*DAT))›30210 MINUTES=PEEK(DBUFR+9+(8*DAT))-PEEK(DBUFR+1+(8*DAT))›30211 IF SECONDS<0 THEN SECONDS=SECONDS+60:MINUTES=MINUTES-1›30212 TOC$((DAT-1)*2+1)=CHR$(MINUTES)›30213 TOC$((DAT-1)*2+2)=CHR$(SECONDS)›30214 ELSE ›30215 TOC$((DAT-1)*2+1)="DT"›30216 ENDIF ›30217 NEXT DAT›30290 EXEC CURTRACK›30300 IF LASTTRACK<49›30302 MAXSCREEN=1›30305 ELSE ›30307 IF LASTTRACK<73›30308 MAXSCREEN=2›30309 ELSE ›30314 MAXSCREEN=3›30316 ENDIF ›30318 ENDIF ›30330 IF ((AUDIOSTATUS<17 AND AUDIOSTATUS>18) OR (LASTTRACK<49))›30332 FIRSTONDISPLAY=FIRSTTRACK›30334 IF LASTTRACK<49›30336 LASTONDISPLAY=LASTTRACK›30338 ELSE ›30340 LASTONDISPLAY=FIRSTTRACK+35›30342 ENDIF ›30344 ELSE ›30346 IF (CURRENTTRACK<37)›30348 FIRSTONDISPLAY=FIRSTTRACK›30350 LASTONDISPLAY=FIRSTTRACK+35›30352 ELSE ›30353 IF (CURRENTTRACK<73)›30354 FIRSTONDISPLAY=FIRSTTRACK+36›30355 IF (LASTTRACK<73)›30356 LASTONDISPLAY=LASTTRACK›30357 ELSE ›30358 LASTONDISPLAY=FIRSTTRACK+71›30359 ENDIF ›30360 ELSE ›30362 FIRSTONDISPLAY=FIRSTTRACK+72›30364 LASTONDISPLAY=LASTTRACK›30366 ENDIF ›30368 ENDIF ›30370 ENDIF ›30380 CURRENTTRACK=FIRSTTRACK›30385 CURRENTINDEX=1›30390 EXEC SHOWTOC›30395 POSITION 28,16:? " "›30396 REM POSITION 28,16:? "TOC_OUT OUT"›30398 ENDPROC ›30399 ------------------------------›30400 PROC INCREASE_ID›30405 REM POSITION 28,16:? "INC_ID IN "›30420 IF CI<6›30430 CI=CI+1:REM Increase ID›30440 POKE 1541,CI›30450 EXEC FIND_CD›30460 ELSE ›30470 ENDIF ›30495 REM POSITION 28,16:? "INC_ID OUT"›30498 ENDPROC ›30499 ------------------------------›30500 PROC NOCD›30502 REM POSITION 28,16:? "NOCD IN "›30504 LASTTRACK=0›30505 IF HELP<>1›30510 POSITION 1,4:? " No audio CD "›30520 POSITION 8,22:? " "›30530 POSITION 19,22:? " "›30540 FOR LINE=5 TO 15›30541 POSITION 1,LINE:? " ";›30542 SCREENSTART=DPEEK(88)-1›30543 POKE SCREENSTART+40*LINE,0›30544 NEXT LINE›30545 POKE SCREENSTART+40*LINE,0›30550 ENDIF ›30595 REM POSITION 28,16:? "NOCD OUT"›30598 ENDPROC ›30599 ------------------------------›30600 PROC CMDDCB›30605 REM POSITION 28,16:? "CMD_DCB IN "›30610 POKE DDEVIC,112:REM ATASPI›30620 POKE DUNIT,1:REM Number of ATASPI Manager›30630 POKE DCOMND,2:REM Execute SCSI Command›30640 POKE DSTATS,ROW:REM Write=128, Read=64›30650 DPOKE DBUFLO,DBUFR›30660 POKE DTIMO,31:REM Time out value›30670 POKE DBYTLO,CMDLEN:REM Number of bytes›30680 POKE DBYTHI,0›30695 REM POSITION 28,16:? "CMD_DCB OUT"›30698 ENDPROC ›30699 ------------------------------›30700 PROC MENU›30705 REM POSITION 28,16:? "MENU IN "›30710 REPEAT ›30715 EXEC CURTRACK›30717 AUDIOSTATUS=PEEK(DBUFR+1)›30720 EXEC DASH_DISPLAY›30725 EXEC DISPLAY_AUDIOSTATUS›30730 POSITION 2,22:? "TRACK "›30735 POSITION 13,22:? "INDEX "›30740 POSITION 2,19›30745 ? "Press H, ? or [HELP]"›30750 KEY$=INKEY$›30753 IF KEY$="P" THEN EXEC PLAYPAUSE›30756 IF KEY$="<" THEN EXEC PREVTRACK›30759 IF KEY$=">" THEN EXEC NEXTTRACK›30762 IF KEY$="O" THEN EXEC CDOPEN›30765 REM IF KEY$="I" THEN EXEC MCN›30766 REM IF KEY$="T" THEN EXEC ISRC›30767 IF KEY$="+" OR KEY$="*" THEN EXEC SCAN_NO_MMC›30768 REM IF KEY$="M" THEN EXEC MEMORY›30771 REM IF KEY$="R" THEN EXEC SHUFFLE›30775 IF KEY$="-" OR KEY$="=" THEN EXEC CHANGE_INDEX›30780 IF (KEY$>CHR$(48) OR (LASTTRACK>9 AND KEY$=CHR$(48)))›30782 IF (LASTTRACK>9 AND KEY$127:REM IF PEEK(DBUFR+2)>127›31100 ELSE ›31110 EXEC TOCOUT›31115 T=1›31120 ENDIF ›31130 ELSE ›31140 ENDIF ›31150 ENDIF ›31160 ENDIF ›31170 ELSE ›31180 ENDIF ›31195 REM POSITION 28,16:? "CHECK OUT"›31198 ENDPROC ›31199 ------------------------------›31200 PROC CMDINQ›31205 REM POSITION 28,16:? "CMDINQ IN "›31210 DPOKE DBYTLO,36›31220 POKE DAUX1,5›31230 POKE DAUX2,6›31240 DPOKE DBUFLO,DBUFR›31250 EXEC GO_ML›31260 EXEC CHECK›31295 REM POSITION 28,16:? "CMDINQ OUT"›31298 ENDPROC ›31299 ------------------------------›31399 ------------------------------›31400 PROC FIND_CD›31405 REM POSITION 28,16:? "FIND_CD IN "›31410 EXEC CMDDCB›31420 EXEC CMDINQ›31430 FIRSTBYTE=PEEK(DBUFR)›31440 FIRSTBYTE=FIRSTBYTE&31›31450 IF FIRSTBYTE=5›31455 POSITION 2,1›31460 CDID=CI:? "Id ";CI;" is a CD-ROM player"›31470 FOR DAT=0 TO 7:POKE (DBUFR+DAT),0:NEXT DAT›31480 FOR DAT=8 TO 31:? CHR$(PEEK(DBUFR+DAT));:POKE (DBUFR+DAT),0:NEXT DAT›31490 ELSE ›31500 ENDIF ›31510 EXEC CHECK›31515 EXEC INCREASE_ID›31520 ENDPROC ›31595 REM POSITION 28,16:? "FIND_CD OUT"›31599 ------------------------------›31600 PROC SETUP_SUB›31605 REM POSITION 28,16:? "SET_SUB IN "›31610 FOR GOASPI=1536 TO 1540›31620 READ ML_SUB:POKE GOASPI,ML_SUB›31630 NEXT GOASPI›31635 REM POSITION 28,16:? "SET_SUB OUT"›31640 ENDPROC ›31649 ------------------------------›31650 PROC SETUP_CMDS›31655 REM POSITION 28,16:? "SET_CMD IN "›31660 RESTORE 32020›31670 FOR COMMANDS=1541 TO 1670›31680 READ CMDS:POKE COMMANDS,CMDS›31690 NEXT COMMANDS›31695 REM POSITION 28,16:? "SET_CMD OUT"›31698 ENDPROC ›31699 ------------------------------›31700 PROC CDOPEN›31705 REM POSITION 28,16:? "CD_OPEN IN "›31710 EXEC CMDDCB›31720 POKE DAUX1,65›31730 POKE DAUX2,6›31740 DPOKE DBYTLO,0›31750 POKE 1601,CDID›31760 EXEC GO_ML›31765 EXEC CHECK›31770 POKE DAUX1,65›31775 POKE DAUX2,6›31780 POKE (DPEEK(DAUX1)+6),PEEK(DPEEK(DAUX1)+6) EXOR 1›31790 IF PEEK(DPEEK(DAUX1)+6)&1=1 THEN OLDTRACK2=0:OLDTRACK=0:OLDINDEX=0›31795 REM POSITION 28,16:? "CD_OPEN OUT"›31798 ENDPROC ›31799 ------------------------------›31800 PROC REQSENS›31802 REM POSITION 28,16:? "REQ_SEN IN "›31805 EXEC CMDDCB›31810 POKE DAUX1,13›31820 POKE DAUX2,6›31830 DPOKE DBYTLO,255›31840 POKE 1549,CDID›31870 EXEC GO_ML›31875 EXEC CHECK›31895 REM POSITION 28,16:? "REQ_SEN OUT"›31898 ENDPROC ›31899 ------------------------------›31900 PROC READ_TOC›31903 REM POSITION 28,16:? "REA_TOC IN "›31905 POKE 1607,PEEK(1607)&254›31910 EXEC CMDDCB›31920 POKE DAUX1,21›31930 POKE DAUX2,6›31940 POKE 1557,CDID›31950 DPOKE DBYTLO,804›31960 EXEC GO_ML›31970 EXEC CHECK›31995 REM POSITION 28,16:? "REA_TOC OUT"›31998 ENDPROC ›31999 ------------------------------›32000 DATA 104,108,2,0,96›32010 REM PLA, JMP ($0002),RTS›32020 DATA 0,6,18,0,0,0,36,0›32030 REM Command: Inquiry›32040 DATA 0,6,3,0,0,0,255,0›32050 REM Command: Request sense›32060 DATA 0,10,67,2,0,0,0,0,1,3,36,0›32070 REM Command: Read TOC›32080 DATA 0,6,0,0,0,0,0,0›32090 REM Command: Test Unit Ready›32100 DATA 0,10,75,0,0,0,0,0,0,0,0,0›32110 REM Command: Resume›32120 DATA 0,10,72,0,0,0,2,1,0,4,99,0›32130 REM Command: PlayTrack›32140 DATA 0,6,27,0,0,0,2,0›32150 REM Command: Load (Open/Close)›32160 DATA 0,10,66,0,0,0,0,0,1,1,0,0›32170 REM Command: Read SubChannel›32180 DATA 0,10,70,0,0,0,0,0,0,1,0,0›32190 REM Command: Get Configuration›32200 DATA 0,12,186,0,0,0,0,0,0,0,0,64,0,0›32210 REM Command: Scan›32220 DATA 0,10,78,0,0,0,0,0,0,0,0,0›32230 REM Command: Stop Play/Scan›32240 DATA 0,10,71,0,0,0,0,0,99,59,74,0›32250 REM Command: Play Audio MSF›