mirror of https://github.com/wwarthen/RomWBW.git
102 changed files with 3939 additions and 2109 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Binary file not shown.
Binary file not shown.
@ -1,122 +0,0 @@ |
|||
; |
|||
;====================================================================== |
|||
; PSG AY-3-8910 DRIVER FOR CONSOLE BELL |
|||
; WILL ALSO WORK WITH YM2149 |
|||
;====================================================================== |
|||
; |
|||
#IF (AYMODE == AYMODE_SCG) |
|||
AY_RSEL .EQU $9A |
|||
AY_RDAT .EQU $9B |
|||
AY_ACR .EQU $9C |
|||
#ENDIF |
|||
; |
|||
#IF (AYMODE == AYMODE_N8) |
|||
AY_RSEL .EQU $9C |
|||
AY_RDAT .EQU $9D |
|||
AY_ACR .EQU N8_DEFACR |
|||
#ENDIF |
|||
; |
|||
#IF (AYMODE == AYMODE_RCZ80) |
|||
AY_RSEL .EQU $D8 |
|||
AY_RDAT .EQU $D0 |
|||
#ENDIF |
|||
; |
|||
#IF (AYMODE == AYMODE_RCZ180) |
|||
AY_RSEL .EQU $68 |
|||
AY_RDAT .EQU $60 |
|||
#ENDIF |
|||
; |
|||
AY_R0CHAP .EQU $00 |
|||
AY_R1CHAP .EQU $01 |
|||
AY_R2CHBP .EQU $02 |
|||
AY_R3CHBP .EQU $03 |
|||
AY_R7ENAB .EQU $07 |
|||
AY_R8AVOL .EQU $08 |
|||
AY_R9BVOL .EQU $09 |
|||
; |
|||
;====================================================================== |
|||
; PSG AY-3-8910 DRIVER - INITIALIZATION |
|||
;====================================================================== |
|||
; |
|||
AY_INIT: |
|||
CALL NEWLINE ; FORMATTING |
|||
PRTS("AY: IO=0x$") |
|||
LD A,AY_RSEL |
|||
CALL PRTHEXBYTE |
|||
CALL AY_PROBE ; CHECK FOR HW EXISTENCE |
|||
JR Z,AY_INIT1 ; CONTINUE IF PRESENT |
|||
; |
|||
; HARDWARE NOT PRESENT |
|||
; |
|||
PRTS(" NOT PRESENT$") |
|||
OR $FF ; SIGNAL FAILURE |
|||
RET |
|||
; |
|||
AY_INIT1: |
|||
CALL AY_INIT2 |
|||
CALL AY_BEEP |
|||
AY_INIT2: |
|||
LD D,AY_R7ENAB ; SET MIXER CONTROL / IO ENABLE |
|||
LD E,$FF ; $FF - 11 111 111 |
|||
CALL AY_WRTPSG ; I/O PORTS DISABLED, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A DISABLE |
|||
; |
|||
LD B,2 |
|||
LD D,AY_R8AVOL ; SET VOLUME TO 0 |
|||
LD E,$00 |
|||
AY_QUIET: |
|||
CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS |
|||
INC A |
|||
DJNZ AY_QUIET |
|||
RET |
|||
; |
|||
; PLAY A BEEP TONE ON CENTER CHANNEL (LEFT AND RIGHT SPEAKERS) |
|||
; |
|||
AY_BEEP: |
|||
LD D,AY_R2CHBP ; SET TONE PERIOD |
|||
LD E,$55 ; CHANNEL B - R00 & R01 |
|||
CALL AY_WRTPSG ; $0055 = XXXX0000 01010101 |
|||
LD D,AY_R3CHBP |
|||
LD E,0 |
|||
CALL AY_WRTPSG |
|||
; |
|||
LD D,AY_R7ENAB ; $FD = 11 111 101 |
|||
LD E,$FD ; SET MIXER CONTROL / IO ENABLE |
|||
CALL AY_WRTPSG ; I/O PORTS DISABLED, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL B ENABLE |
|||
; |
|||
LD D,AY_R9BVOL |
|||
LD E,$07 ; SET CHANNEL B VOLUME TO 50% (7/16) |
|||
CALL AY_WRTPSG |
|||
; |
|||
CALL LDELAY ; HALF SECOND |
|||
RET |
|||
; |
|||
; WRITE DATA E TO PSG REG A |
|||
; |
|||
AY_WRTPSG: |
|||
HB_DI |
|||
#IF (CPUFAM == CPU_Z180) |
|||
IN0 A,(Z180_DCNTL) ; GET WAIT STATES |
|||
PUSH AF ; SAVE VALUE |
|||
OR %00110000 ; FORCE SLOW OPERATION (I/O W/S=3) |
|||
OUT0 (Z180_DCNTL),A ; AND UPDATE DCNTL |
|||
#ENDIF |
|||
LD A,D |
|||
OUT (AY_RSEL),A |
|||
LD A,E |
|||
OUT (AY_RDAT),A |
|||
#IF (CPUFAM == CPU_Z180) |
|||
POP AF ; GET SAVED DCNTL VALUE |
|||
OUT0 (Z180_DCNTL),A ; AND RESTORE IT |
|||
#ENDIF |
|||
HB_EI |
|||
RET |
|||
; |
|||
; CHECK THERE IS A DEVICE PRESENT |
|||
; |
|||
AY_PROBE: |
|||
#IF ((AYMODE == AYMODE_SCG) | (AYMODE == AYMODE_N8)) |
|||
LD A,$FF |
|||
OUT (AY_ACR),A ; INIT AUX CONTROL REG |
|||
#ENDIF |
|||
XOR A |
|||
RET |
|||
@ -0,0 +1,494 @@ |
|||
;====================================================================== |
|||
; |
|||
; AY-3-8910 / YM2149 SOUND DRIVER |
|||
; |
|||
;====================================================================== |
|||
; |
|||
AY_RCSND .EQU 0 ; 0 = EB MODULE, 1=MF MODULE |
|||
; |
|||
#IF (AYMODE == AYMODE_SCG) |
|||
AY_RSEL .EQU $9A |
|||
AY_RDAT .EQU $9B |
|||
AY_RIN .EQU AY_RSEL |
|||
AY_ACR .EQU $9C |
|||
#ENDIF |
|||
; |
|||
#IF (AYMODE == AYMODE_N8) |
|||
AY_RSEL .EQU $9C |
|||
AY_RDAT .EQU $9D |
|||
AY_RIN .EQU AY_RSEL |
|||
AY_ACR .EQU N8_DEFACR |
|||
#ENDIF |
|||
; |
|||
#IF (AYMODE == AYMODE_RCZ80) |
|||
AY_RSEL .EQU $D8 |
|||
AY_RDAT .EQU $D0 |
|||
AY_RIN .EQU AY_RSEL+AY_RCSND |
|||
#ENDIF |
|||
; |
|||
#IF (AYMODE == AYMODE_RCZ180) |
|||
AY_RSEL .EQU $68 |
|||
AY_RDAT .EQU $60 |
|||
AY_RIN .EQU AY_RSEL+AY_RCSND |
|||
#ENDIF |
|||
; |
|||
;====================================================================== |
|||
; |
|||
; REGISTERS |
|||
; |
|||
AY_R2CHBP .EQU $02 |
|||
AY_R3CHBP .EQU $03 |
|||
AY_R7ENAB .EQU $07 |
|||
AY_R8AVOL .EQU $08 |
|||
; |
|||
;====================================================================== |
|||
; |
|||
; DRIVER FUNCTION TABLE AND INSTANCE DATA |
|||
; |
|||
AY_FNTBL: |
|||
.DW AY_RESET |
|||
.DW AY_VOLUME |
|||
.DW AY_PERIOD |
|||
.DW AY_NOTE |
|||
.DW AY_PLAY |
|||
.DW AY_QUERY |
|||
|
|||
#IF (($ - AY_FNTBL) != (SND_FNCNT * 2)) |
|||
.ECHO "*** INVALID SND FUNCTION TABLE ***\n" |
|||
!!!!! |
|||
#ENDIF |
|||
; |
|||
AY_IDAT .EQU 0 ; NO INSTANCE DATA ASSOCIATED WITH THIS DEVICE |
|||
; |
|||
;====================================================================== |
|||
; |
|||
; DEVICE CAPABILITIES AND CONFIGURATION |
|||
; |
|||
SBCV2004 .EQU 0 ; USE SBC-V2-004 HALF CLOCK DIVIDER |
|||
; |
|||
AY_TONECNT .EQU 3 ; COUNT NUMBER OF TONE CHANNELS |
|||
AY_NOISECNT .EQU 1 ; COUNT NUMBER OF NOISE CHANNELS |
|||
; |
|||
AY_PHICLK .EQU 3579545 ; MSX NTSC COLOUR BURST FREQ = 315/88 |
|||
;AY_PHICLK .EQU 3500000 ; ZX SPECTRUM 3.5MHZ |
|||
;AY_PHICLK .EQU 4000000 ; RETROBREW SCB-SCG |
|||
AY_RATIO .EQU AY_CLK * 100 / 16 |
|||
; |
|||
#INCLUDE "audio.inc" |
|||
; |
|||
;====================================================================== |
|||
; |
|||
; DRIVER INITIALIZATION (THERE IS NO PRE-INITIALIZATION) |
|||
; |
|||
; ANNOUNCE DEVICE ON CONSOLE. ACTIVATE DEVICE IF REQUIRED. |
|||
; SETUP FUNCTION TABLES. SETUP THE DEVICE. |
|||
; ANNOUNCE DEVICE WITH BEEP. SET VOLUME OFF. |
|||
; RETURN INITIALIZATION STATUS |
|||
; |
|||
AY38910_INIT: |
|||
CALL NEWLINE ; ANNOUNCE |
|||
PRTS("AY: IO=0x$") |
|||
LD A,AY_RSEL |
|||
CALL PRTHEXBYTE |
|||
; |
|||
#IF ((AYMODE == AYMODE_SCG) | (AYMODE == AYMODE_N8)) |
|||
LD A,$FF ; ACTIVATE DEVICEBIT 4 IS AY RESET CONTROL, BIT 3 IS ACTIVE LED |
|||
OUT (AY_ACR),A ; SET INIT AUX CONTROL REG |
|||
#ENDIF |
|||
; |
|||
LD DE,(AY_R2CHBP*256)+$55 ; SIMPLE HARDWARE PROBE |
|||
CALL AY_WRTPSG ; WRITE AND |
|||
CALL AY_RDPSG ; READ TO A |
|||
LD A,$55 ; SOUND CHANNEL |
|||
CP E ; REGISTER |
|||
JR Z,AY_FND |
|||
; |
|||
CALL PRTSTRD \ .TEXT " NOT PRESENT$" |
|||
; |
|||
LD A,$FF ; UNSUCCESSFULL INIT |
|||
RET |
|||
; |
|||
AY_FND: LD IY, AY_IDAT ; SETUP FUNCTION TABLE |
|||
LD BC, AY_FNTBL ; POINTER TO INSTANCE DATA |
|||
LD DE, AY_IDAT ; BC := FUNCTION TABLE ADDRESS |
|||
CALL SND_ADDENT ; DE := INSTANCE DATA PTR |
|||
; |
|||
CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION |
|||
; |
|||
LD E,$07 ; SET VOLUME TO 50% |
|||
CALL AY_SETV ; ON ALL CHANNELS |
|||
; |
|||
; LD DE,(AY_R2CHBP*256)+$55 ; BEEP ON CHANNEL B (CENTER) |
|||
; CALL AY_WRTPSG ; R02 = $55 = 01010101 |
|||
LD DE,(AY_R3CHBP*256)+$00 |
|||
CALL AY_WRTPSG ; R03 = $00 = XXXX0000 |
|||
; |
|||
CALL LDELAY ; HALF SECOND DELAY |
|||
; |
|||
LD E,$00 ; SET VOLUME OFF |
|||
CALL AY_SETV ; ON ALL CHANNELS |
|||
; |
|||
XOR A ; SUCCESSFULL INIT |
|||
RET |
|||
; |
|||
;====================================================================== |
|||
; INITIALIZE DEVICE |
|||
;====================================================================== |
|||
; |
|||
AY_INIT: |
|||
LD DE,(AY_R7ENAB*256)+$F8 ; SET MIXER CONTROL / IO ENABLE. $F8 - 11 111 000 |
|||
CALL AY_WRTPSG ; I/O PORTS = OUTPUT, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE |
|||
RET |
|||
; |
|||
;====================================================================== |
|||
; SET VOLUME ALL CHANNELS |
|||
;====================================================================== |
|||
; |
|||
AY_SETV: |
|||
PUSH BC |
|||
LD B,AY_TONECNT ; NUMBER OF CHANNELS |
|||
LD D,AY_R8AVOL ; BASE REGISTER FOR VOLUME |
|||
AY_SV: CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS |
|||
INC D |
|||
DJNZ AY_SV |
|||
POP BC |
|||
RET |
|||
; |
|||
;====================================================================== |
|||
; SOUND DRIVER FUNCTION - RESET |
|||
; |
|||
; INITIALIZE DEVICE. SET VOLUME OFF. RESET VOLUME AND TONE VARIABLES. |
|||
; |
|||
;====================================================================== |
|||
; |
|||
AY_RESET: |
|||
AUDTRACE(AYT_INIT) |
|||
; |
|||
PUSH DE |
|||
PUSH HL |
|||
CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION |
|||
; |
|||
AUDTRACE(AYT_VOLOFF) |
|||
LD E,0 ; SET VOLUME OFF |
|||
CALL AY_SETV ; ON ALL CHANNELS |
|||
; |
|||
XOR A ; SIGNAL SUCCESS |
|||
LD (AY_PENDING_VOLUME),A ; SET VOLUME TO ZERO |
|||
LD H,A |
|||
LD L,A |
|||
LD (AY_PENDING_PERIOD),HL ; SET TONE PERIOD TO ZERO |
|||
; |
|||
POP HL |
|||
POP DE |
|||
RET |
|||
; |
|||
;====================================================================== |
|||
; SOUND DRIVER FUNCTION - VOLUME |
|||
;====================================================================== |
|||
; |
|||
AY_VOLUME: |
|||
AUDTRACE(AYT_VOL) |
|||
AUDTRACE_L |
|||
AUDTRACE_CR |
|||
LD A,L ; SAVE VOLUME |
|||
LD (AY_PENDING_VOLUME), A |
|||
; |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
; |
|||
;====================================================================== |
|||
; SOUND DRIVER FUNCTION - NOTE |
|||
;====================================================================== |
|||
; |
|||
AY_NOTE: |
|||
AUDTRACE(AYT_NOTE) |
|||
AUDTRACE_HL |
|||
AUDTRACE_CR |
|||
|
|||
LD DE, AY3NOTETBL |
|||
CALL AUD_NOTE ; RETURNS PERIOD IN HL, FALL THRU |
|||
; TO SET THIS PERIOD |
|||
; |
|||
;====================================================================== |
|||
; SOUND DRIVER FUNCTION - PERIOD |
|||
;====================================================================== |
|||
; |
|||
AY_PERIOD: |
|||
AUDTRACE(AYT_PERIOD) |
|||
AUDTRACE_HL |
|||
AUDTRACE_CR |
|||
|
|||
LD A, H ; IF ZERO - ERROR |
|||
OR L |
|||
JR Z, AY_PERIOD1 |
|||
|
|||
LD A, H ; MAXIMUM TONE PERIOD IS 12-BITS |
|||
AND 11110000B ; ALLOWED RANGE IS 0001-0FFF (4095) |
|||
JR NZ, AY_PERIOD1 ; RETURN NZ IF NUMBER TOO LARGE |
|||
LD (AY_PENDING_PERIOD), HL ; SAVE AND RETURN SUCCESSFUL |
|||
RET |
|||
; |
|||
AY_PERIOD1: |
|||
LD A, $FF ; REQUESTED PERIOD IS LARGER |
|||
LD (AY_PENDING_PERIOD), A ; THAN THE DEVICE CAN SUPPORT |
|||
LD (AY_PENDING_PERIOD+1), A; SO SET PERIOD TO FFFF |
|||
RET ; AND RETURN FAILURE |
|||
; |
|||
;====================================================================== |
|||
; SOUND DRIVER FUNCTION - PLAY |
|||
; B = FUNCTION |
|||
; C = AUDIO DEVICE |
|||
; D = CHANNEL |
|||
; A = EXIT STATUS |
|||
;====================================================================== |
|||
; |
|||
AY_PLAY: |
|||
AUDTRACE(AYT_PLAY) |
|||
AUDTRACE_D |
|||
AUDTRACE_CR |
|||
; |
|||
LD A, (AY_PENDING_PERIOD + 1) ; CHECK THE HIGH BYTE OF THE PERIOD |
|||
INC A |
|||
JR Z, AY_PLAY1 ; PERIOD IS TOO LARGE, UNABLE TO PLAY |
|||
; |
|||
PUSH HL |
|||
PUSH DE |
|||
LD A,D ; LIMIT CHANNEL 0-2 |
|||
AND $3 ; AND INDEX TO THE |
|||
ADD A,A ; CHANNEL REGISTER |
|||
LD D,A ; FOR THE TONE PERIOD |
|||
; |
|||
AUDTRACE(AYT_REGWR) |
|||
AUDTRACE_A |
|||
AUDTRACE_CR |
|||
; |
|||
LD HL,AY_PENDING_PERIOD ; WRITE THE LOWER |
|||
ld E,(HL) ; 8-BITS OF THE TONE PERIOD |
|||
CALL AY_WRTPSG |
|||
INC D ; NEXT REGISTER |
|||
INC HL ; NEXT BYTE |
|||
LD E,(HL) ; WRITE THE UPPER |
|||
CALL AY_WRTPSG ; 8-BITS OF THE TONE PERIOD |
|||
; |
|||
POP DE ; RECALL CHANNEL |
|||
PUSH DE ; SAVE CHANNEL |
|||
; |
|||
LD A,D ; LIMIT CHANNEL 0-2 |
|||
AND $3 ; AND INDEX TO THE |
|||
ADD A,AY_R8AVOL ; CHANNEL VOLUME |
|||
LD D,A ; REGISTER |
|||
; |
|||
AUDTRACE(AYT_REGWR) |
|||
AUDTRACE_A |
|||
AUDTRACE_CR |
|||
; |
|||
INC HL ; NEXT BYTE |
|||
LD A,(HL) ; PENDING VOLUME |
|||
RRCA ; MAP THE VOLUME |
|||
RRCA ; FROM 00-FF |
|||
RRCA ; TO 00-0F |
|||
RRCA |
|||
AND $0F |
|||
LD E,A |
|||
CALL AY_WRTPSG ; SET VOL (E) IN CHANNEL REG (D) |
|||
; |
|||
POP DE ; RECALL CHANNEL |
|||
POP HL |
|||
; |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
; |
|||
AY_PLAY1: |
|||
PUSH DE ; TURN VOLUME OFF TO STOP PLAYING |
|||
LD A,D ; LIMIT CHANNEL 0-2 |
|||
AND $3 ; AND INDEX TO THE |
|||
ADD A,AY_R8AVOL ; CHANNEL VOLUME |
|||
LD D,A ; REGISTER |
|||
LD E,0 |
|||
CALL AY_WRTPSG ; SET VOL (E) IN CHANNEL REG (D) |
|||
POP DE |
|||
OR $FF ; SIGNAL FAILURE |
|||
RET |
|||
; |
|||
;====================================================================== |
|||
; SOUND DRIVER FUNCTION - QUERY AND SUBFUNCTIONS |
|||
;====================================================================== |
|||
; |
|||
AY_QUERY: |
|||
LD A, E |
|||
CP BF_SNDQ_CHCNT ; SUB FUNCTION 01 |
|||
JR Z, AY_QUERY_CHCNT |
|||
; |
|||
CP BF_SNDQ_VOLUME ; SUB FUNCTION 02 |
|||
JR Z, AY_QUERY_VOLUME |
|||
; |
|||
CP BF_SNDQ_PERIOD ; SUB FUNCTION 03 |
|||
JR Z, AY_QUERY_PERIOD |
|||
; |
|||
CP BF_SNDQ_DEV ; SUB FUNCTION 04 |
|||
JR Z, AY_QUERY_DEV |
|||
; |
|||
OR $FF ; SIGNAL FAILURE |
|||
RET |
|||
; |
|||
AY_QUERY_CHCNT: |
|||
LD BC,(AY_TONECNT*256)+AY_NOISECNT ; RETURN NUMBER OF |
|||
XOR A ; TONE AND NOISE |
|||
RET ; CHANNELS IN BC |
|||
; |
|||
AY_QUERY_PERIOD: |
|||
LD HL, (AY_PENDING_PERIOD) ; RETURN 16-BIT PERIOD |
|||
XOR A ; IN HL REGISTER |
|||
RET |
|||
; |
|||
AY_QUERY_VOLUME: |
|||
LD A, (AY_PENDING_VOLUME) ; RETURN 8-BIT VOLUME |
|||
LD L, A ; IN L REGISTER |
|||
XOR A |
|||
; LD H, A |
|||
RET |
|||
; |
|||
AY_QUERY_DEV: |
|||
LD B, BF_SND_AY38910 ; RETURN DEVICE IDENTIFIER |
|||
LD DE, (AY_RSEL*256)+AY_RDAT ; AND ADDRESS AND DATA PORT |
|||
XOR A |
|||
RET |
|||
; |
|||
;====================================================================== |
|||
; |
|||
; WRITE DATA IN E REGISTER TO DEVICE REGISTER D |
|||
; INTERRUPTS DISABLE DURING WRITE. WRITE IN SLOW MODE IF Z180 CPU. |
|||
; |
|||
;====================================================================== |
|||
; |
|||
AY_WRTPSG: |
|||
HB_DI |
|||
#IF (SBCV2004) |
|||
LD A,8 ; SBC-V2-004 CHANGE |
|||
OUT (112),A ; TO HALF CLOCK SPEED |
|||
#ENDIF |
|||
#IF (CPUFAM == CPU_Z180) |
|||
IN0 A,(Z180_DCNTL) ; GET WAIT STATES |
|||
PUSH AF ; SAVE VALUE |
|||
OR %00110000 ; FORCE SLOW OPERATION (I/O W/S=3) |
|||
OUT0 (Z180_DCNTL),A ; AND UPDATE DCNTL |
|||
#ENDIF |
|||
LD A,D ; SELECT THE REGISTER WE |
|||
OUT (AY_RSEL),A ; WANT TO WRITE TO |
|||
LD A,E ; WRITE THE VALUE TO |
|||
OUT (AY_RDAT),A ; THE SELECTED REGISTER |
|||
#IF (CPUFAM == CPU_Z180) |
|||
POP AF ; GET SAVED DCNTL VALUE |
|||
OUT0 (Z180_DCNTL),A ; AND RESTORE IT |
|||
#ENDIF |
|||
#IF (SBCV2004) |
|||
LD A,0 ; SBC-V2-004 CHANGE TO |
|||
OUT (112),A ; NORMAL CLOCK SPEED |
|||
#ENDIF |
|||
HB_EI |
|||
RET |
|||
|
|||
; |
|||
;====================================================================== |
|||
; |
|||
; READ FROM REGISTER D AND RETURN WITH RESULT IN E |
|||
; |
|||
AY_RDPSG: |
|||
HB_DI |
|||
#IF (SBCV2004) |
|||
LD A,8 ; SBC-V2-004 CHANGE |
|||
OUT (112),A ; TO HALF CLOCK SPEED |
|||
#ENDIF |
|||
#IF (CPUFAM == CPU_Z180) |
|||
IN0 A,(Z180_DCNTL) ; GET WAIT STATES |
|||
PUSH AF ; SAVE VALUE |
|||
OR %00110000 ; FORCE SLOW OPERATION (I/O W/S=3) |
|||
OUT0 (Z180_DCNTL),A ; AND UPDATE DCNTL |
|||
#ENDIF |
|||
LD A,D ; SELECT THE REGISTER WE |
|||
OUT (AY_RSEL),A ; WANT TO READ |
|||
IN A,(AY_RIN) ; READ SELECTED REGISTER |
|||
LD E,A |
|||
#IF (CPUFAM == CPU_Z180) |
|||
POP AF ; GET SAVED DCNTL VALUE |
|||
OUT0 (Z180_DCNTL),A ; AND RESTORE IT |
|||
#ENDIF |
|||
#IF (SBCV2004) |
|||
LD A,0 ; SBC-V2-004 CHANGE TO |
|||
OUT (112),A ; NORMAL CLOCK SPEED |
|||
#ENDIF |
|||
HB_EI |
|||
RET |
|||
; |
|||
;====================================================================== |
|||
; |
|||
AY_PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS) ; ORDER |
|||
AY_PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS) ; SIGNIFICANT |
|||
; |
|||
#IF AUDIOTRACE |
|||
AYT_INIT .DB "\r\nAY_INIT\r\n$" |
|||
AYT_VOLOFF .DB "\r\nAY_VOLUME OFF\r\n$" |
|||
AYT_VOL .DB "\r\nAY_VOLUME: $" |
|||
AYT_NOTE .DB "\r\nAY_NOTE: $" |
|||
AYT_PERIOD .DB "\r\nAY_PERIOD $" |
|||
AYT_PLAY .DB "\r\nAY_PLAY CH: $" |
|||
AYT_REGWR .DB "\r\nOUT AY-3-8910 $" |
|||
#ENDIF |
|||
; |
|||
;====================================================================== |
|||
; BBC MICRO QUARTER TONE FREQUENCY TABLE |
|||
;====================================================================== |
|||
; |
|||
; THE FREQUENCY BY QUARTER TONE STARTING AT A0# OCATVE 0 |
|||
; USED TO MAP EACH OCTAVE (DIV BY 2 TO JUMP AN OCTAVE UP) |
|||
; FIRST PLAYABLE NOTE WILL BE 0 |
|||
; ASSUMING A CLOCK OF 1843200 THIS MAPS TO A0# |
|||
AY3NOTETBL: |
|||
.DW AY_RATIO / 2913 |
|||
.DW AY_RATIO / 2956 |
|||
.DW AY_RATIO / 2999 |
|||
.DW AY_RATIO / 3042 |
|||
.DW AY_RATIO / 3086 |
|||
.DW AY_RATIO / 3131 |
|||
.DW AY_RATIO / 3177 |
|||
.DW AY_RATIO / 3223 |
|||
.DW AY_RATIO / 3270 |
|||
.DW AY_RATIO / 3318 |
|||
.DW AY_RATIO / 3366 |
|||
.DW AY_RATIO / 3415 |
|||
.DW AY_RATIO / 3464 |
|||
.DW AY_RATIO / 3515 |
|||
.DW AY_RATIO / 3566 |
|||
.DW AY_RATIO / 3618 |
|||
.DW AY_RATIO / 3670 |
|||
.DW AY_RATIO / 3724 |
|||
.DW AY_RATIO / 3778 |
|||
.DW AY_RATIO / 3833 |
|||
.DW AY_RATIO / 3889 |
|||
.DW AY_RATIO / 3945 |
|||
.DW AY_RATIO / 4003 |
|||
.DW AY_RATIO / 4061 |
|||
.DW AY_RATIO / 4120 |
|||
.DW AY_RATIO / 4180 |
|||
.DW AY_RATIO / 4241 |
|||
.DW AY_RATIO / 4302 |
|||
.DW AY_RATIO / 4365 |
|||
.DW AY_RATIO / 4428 |
|||
.DW AY_RATIO / 4493 |
|||
.DW AY_RATIO / 4558 |
|||
.DW AY_RATIO / 4624 |
|||
.DW AY_RATIO / 4692 |
|||
.DW AY_RATIO / 4760 |
|||
.DW AY_RATIO / 4829 |
|||
.DW AY_RATIO / 4899 |
|||
.DW AY_RATIO / 4971 |
|||
.DW AY_RATIO / 5043 |
|||
.DW AY_RATIO / 5116 |
|||
.DW AY_RATIO / 5191 |
|||
.DW AY_RATIO / 5266 |
|||
.DW AY_RATIO / 5343 |
|||
.DW AY_RATIO / 5421 |
|||
.DW AY_RATIO / 5499 |
|||
.DW AY_RATIO / 5579 |
|||
.DW AY_RATIO / 5661 |
|||
.DW AY_RATIO / 5743 |
|||
@ -0,0 +1 @@ |
|||
@PowerShell -ExecutionPolicy Unrestricted .\BuildDisk.ps1 %* |
|||
@ -0,0 +1,95 @@ |
|||
Param($Disk, $Format="", $SysFile="") |
|||
|
|||
$ErrorAction = 'Stop' |
|||
|
|||
$CpmToolsPath = '../../Tools/cpmtools' |
|||
|
|||
$env:PATH = $CpmToolsPath + ';' + $env:PATH |
|||
|
|||
if ($Format.Length -eq 0) |
|||
{ |
|||
Write-Error "No disk format specified!" -ErrorAction Stop |
|||
return |
|||
} |
|||
|
|||
switch ($Format) |
|||
{ |
|||
"wbw_fd144" |
|||
{ |
|||
# 1.44MB Floppy Disk |
|||
$Desc = "1.44MB Floppy Disk" |
|||
$ImgFile = "fd144_${Disk}.img" |
|||
$MediaID = 6 |
|||
$Size = 1440KB |
|||
} |
|||
|
|||
"wbw_hd" |
|||
{ |
|||
# Legacy Hard Disk Format |
|||
$Desc = "Hard Disk (legacy format)" |
|||
$ImgFile = "hd_${Disk}.img" |
|||
$MediaID = 4 |
|||
$Size = 8MB + 128KB |
|||
} |
|||
|
|||
"wbw_hdnew" |
|||
{ |
|||
# New Hard Disk Format |
|||
$Desc = "Hard Disk (new format)" |
|||
$ImgFile = "hdnew_${Disk}.img" |
|||
$MediaID = 10 |
|||
$Size = 8MB |
|||
} |
|||
} |
|||
|
|||
if (-not (Test-Path("d_${Disk}/"))) |
|||
{ |
|||
Write-Error "Source directory d_${Disk} for disk ${Disk} not found!" -ErrorAction Stop |
|||
return |
|||
} |
|||
|
|||
"Generating $Desc $Disk..." |
|||
|
|||
if ($SysFile.Length -gt 0) |
|||
{ [byte[]]$SysImg = [System.IO.File]::ReadAllBytes($SysFile) } |
|||
else |
|||
{ [byte[]]$SysImg = @() } |
|||
|
|||
$Image = ($SysImg + ([byte[]](0xE5) * ($Size - $SysImg.length))) |
|||
|
|||
# $Image[1410] = 0x4D |
|||
# $Image[1411] = 0x49 |
|||
# $Image[1412] = 0x44 |
|||
# $Image[1413] = $MediaID |
|||
|
|||
[System.IO.File]::WriteAllBytes($ImgFile, $Image) |
|||
|
|||
for ($Usr=0; $Usr -lt 16; $Usr++) |
|||
{ |
|||
if (Test-Path ("d_${Disk}/u${Usr}/*")) |
|||
{ |
|||
$Cmd = "cpmcp -f $Format $ImgFile d_${Disk}/u${Usr}/*.* ${Usr}:" |
|||
$Cmd |
|||
Invoke-Expression $Cmd |
|||
} |
|||
} |
|||
|
|||
if (Test-Path("d_${Disk}.txt")) |
|||
{ |
|||
foreach($Line in Get-Content "d_${Disk}.txt") |
|||
{ |
|||
$Spec = $Line.Trim() |
|||
if (($Spec.Length -gt 0) -and ($Spec.Substring(0,1) -ne "#")) |
|||
{ |
|||
$Cmd = "cpmcp -f $Format $ImgFile ${Spec}" |
|||
$Cmd |
|||
Invoke-Expression $Cmd |
|||
} |
|||
} |
|||
} |
|||
|
|||
"Moving image $ImgFile into output directory..." |
|||
|
|||
Move-Item $ImgFile -Destination "..\..\Binary\" -Force |
|||
|
|||
return |
|||
@ -1 +0,0 @@ |
|||
@PowerShell -ExecutionPolicy Unrestricted .\BuildFD.ps1 %* |
|||
@ -1,69 +0,0 @@ |
|||
#Param([Parameter(Mandatory)]$Disk, $SysFile="") |
|||
Param($Disk, $SysFile="") |
|||
|
|||
$ErrorAction = 'Stop' |
|||
|
|||
$ImgFile = "fd_${Disk}.img" |
|||
$Fmt = "wbw_fd144" |
|||
$Size = 1440KB |
|||
|
|||
$CpmToolsPath = '../../Tools/cpmtools' |
|||
|
|||
$env:PATH = $CpmToolsPath + ';' + $env:PATH |
|||
|
|||
if (-not (Test-Path("d_${Disk}/"))) |
|||
{ |
|||
"Source directory d_${Disk} for disk ${Disk} not found!" |
|||
return |
|||
} |
|||
|
|||
"Generating Floppy Disk ${Disk}..." |
|||
|
|||
#$Blank = ([string]([char]0xE5)) * $Size |
|||
#Set-Content -Value $Blank -NoNewLine -Path $ImgFile |
|||
$Blank = ([byte[]](0xE5) * $Size) |
|||
[System.IO.File]::WriteAllBytes($ImgFile, $Blank) |
|||
|
|||
if ($SysFile.Length -gt 0) |
|||
{ |
|||
"Adding System Image $SysFile..." |
|||
#$Sys = Get-Content -Path "$SysFile.sys" -Raw |
|||
#$Img = Get-Content -Path $ImgFile -Raw |
|||
#$NewImg = $Sys + $Img.SubString($Sys.Length, $Img.Length - $Sys.Length) |
|||
#Set-Content -NoNewLine -Path $ImgFile $NewImg |
|||
|
|||
$Cmd = "mkfs.cpm -f $Fmt -b $SysFile $ImgFile" |
|||
$Cmd |
|||
Invoke-Expression $Cmd |
|||
} |
|||
|
|||
for ($Usr=0; $Usr -lt 16; $Usr++) |
|||
{ |
|||
if (Test-Path ("d_${Disk}/u${Usr}/*")) |
|||
{ |
|||
$Cmd = "cpmcp -f $Fmt $ImgFile d_${Disk}/u${Usr}/*.* ${Usr}:" |
|||
$Cmd |
|||
Invoke-Expression $Cmd |
|||
} |
|||
} |
|||
|
|||
if (Test-Path("d_${Disk}.txt")) |
|||
{ |
|||
foreach($Line in Get-Content "d_${Disk}.txt") |
|||
{ |
|||
$Spec = $Line.Trim() |
|||
if (($Spec.Length -gt 0) -and ($Spec.Substring(0,1) -ne "#")) |
|||
{ |
|||
$Cmd = "cpmcp -f $Fmt $ImgFile ${Spec}" |
|||
$Cmd |
|||
Invoke-Expression $Cmd |
|||
} |
|||
} |
|||
} |
|||
|
|||
"Moving image $ImgFile into output directory..." |
|||
|
|||
#&$env:COMSPEC /c move $ImgFile ..\..\Binary\ |
|||
Move-Item $ImgFile -Destination "..\..\Binary\" -Force |
|||
|
|||
return |
|||
@ -1 +0,0 @@ |
|||
@PowerShell -ExecutionPolicy Unrestricted .\BuildHD.ps1 %* |
|||
@ -1,69 +0,0 @@ |
|||
#Param([Parameter(Mandatory)]$Disk, $SysFile="") |
|||
Param($Disk, $SysFile="") |
|||
|
|||
$ErrorAction = 'Stop' |
|||
|
|||
$ImgFile = "hd_${Disk}.img" |
|||
$Fmt = "wbw_hd0" |
|||
$Size = (128KB * 65) |
|||
|
|||
$CpmToolsPath = '../../Tools/cpmtools' |
|||
|
|||
$env:PATH = $CpmToolsPath + ';' + $env:PATH |
|||
|
|||
if (-not (Test-Path("d_${Disk}/"))) |
|||
{ |
|||
"Source directory d_${Disk} for disk ${Disk} not found!" |
|||
return |
|||
} |
|||
|
|||
"Generating Hard Disk ${Disk}..." |
|||
|
|||
#$Blank = ([string]([char]0xE5)) * $Size |
|||
#Set-Content -Value $Blank -NoNewLine -Path $ImgFile |
|||
$Blank = ([byte[]](0xE5) * $Size) |
|||
[System.IO.File]::WriteAllBytes($ImgFile, $Blank) |
|||
|
|||
if ($SysFile.Length -gt 0) |
|||
{ |
|||
"Adding System Image $SysFile..." |
|||
#$Sys = Get-Content -Path "$SysFile.sys" -Raw |
|||
#$Img = Get-Content -Path $ImgFile -Raw |
|||
#$NewImg = $Sys + $Img.SubString($Sys.Length, $Img.Length - $Sys.Length) |
|||
#Set-Content -NoNewLine -Path $ImgFile $NewImg |
|||
|
|||
$Cmd = "mkfs.cpm -f $Fmt -b $SysFile $ImgFile" |
|||
$Cmd |
|||
Invoke-Expression $Cmd |
|||
} |
|||
|
|||
for ($Usr=0; $Usr -lt 16; $Usr++) |
|||
{ |
|||
if (Test-Path ("d_${Disk}/u${Usr}/*")) |
|||
{ |
|||
$Cmd = "cpmcp -f $Fmt $ImgFile d_${Disk}/u${Usr}/*.* ${Usr}:" |
|||
$Cmd |
|||
Invoke-Expression $Cmd |
|||
} |
|||
} |
|||
|
|||
if (Test-Path("d_${Disk}.txt")) |
|||
{ |
|||
foreach($Line in Get-Content "d_${Disk}.txt") |
|||
{ |
|||
$Spec = $Line.Trim() |
|||
if (($Spec.Length -gt 0) -and ($Spec.Substring(0,1) -ne "#")) |
|||
{ |
|||
$Cmd = "cpmcp -f $Fmt $ImgFile ${Spec}" |
|||
$Cmd |
|||
Invoke-Expression $Cmd |
|||
} |
|||
} |
|||
} |
|||
|
|||
"Moving image $ImgFile into output directory..." |
|||
|
|||
#&$env:COMSPEC /c move $ImgFile ..\..\Binary\ |
|||
Move-Item $ImgFile -Destination "..\..\Binary\" -Force |
|||
|
|||
return |
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,5 +1,5 @@ |
|||
#DEFINE RMJ 3 |
|||
#DEFINE RMN 1 |
|||
#DEFINE RUP 0 |
|||
#DEFINE RUP 1 |
|||
#DEFINE RTP 0 |
|||
#DEFINE BIOSVER "3.1-pre.12" |
|||
#DEFINE BIOSVER "3.1.1-pre.7" |
|||
|
|||
@ -1,7 +1,7 @@ |
|||
rmj equ 3 |
|||
rmn equ 1 |
|||
rup equ 0 |
|||
rup equ 1 |
|||
rtp equ 0 |
|||
biosver macro |
|||
db "3.1-pre.12" |
|||
db "3.1.1-pre.7" |
|||
endm |
|||
|
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue