;********************************************************************* ;* Title: code-config-v00.asm ;********************************************************************* ;* Author: R. Allen Murphey ;* ;* License: Copyright (c) 2020-2022 R. Allen Murphey. All Rights Reserved. ;* ;* Description: Detect and configure for platform ;* ;* Documentation: ;* coco cocoe coco2 coco2b coco3 ;* RESET A027 A027 A027 A027 8C1B ;* CB 1.0 928A 1.1 FEFB 1.2 D8D0 1.3 B5AD 1.2 613F ;* ECB - 1.0 FCE9 1.1 B3A0 1.1 B3A0 2.0 CBB3 ;* DECB - 1.0 FE41 1.1 DEF4 1.1 DEF4 1.1 728B ;* SECB - - - - 2.0 AF30 ;* ;* COCO1 D BOARD COCO2 COCO3 ;* TECH REF MANUAL SERVICE MANUAL SERVICE MANUAL ;* ;* RAM U20 U14 IC16 ;* RAM U21 U15 IC17 ;* RAM U22 U16 IC18 ;* RAM U23 U17 IC19 ;* RAM U24 U18 ;* RAM U25 U19 ;* RAM U26 U20 ;* RAM U27 U21 ;* 4,16,32,64K 16,64K 128,512K ;* ;* EXPANSION ROM U28 U13 IC2 ;* ECB 1.0 ECB 1.1 ECB 2.0 ;* ;* ROM U3 U12 IC2 ;* CB 1.0 1.1 CB 1.2 1.3 CB 1.2? ;* ;* CARTRIDGE ROM -- -- -- ;* DECB 1.0 DECB 1.1 SECB 2.1 ;* ;* ADDITIONAL ROM -- -- IC2 ;* NOT INSTALLED NOT INSTALLED SECB 2.0 ;* ;* PIA0 U8 U7 IC5 ;* 6821 6821 LSC81001A ;* ;* MUX U9 -- -- ;* MC14529 ANALOG ANALOG ;* ;* PIA1 U4 U2 IC4 ;* 6821 6821 68B21 ;* ;* DAC -- U3 IC7 ;* ;* SALT -- U1 IC8 ;* ;* VDG/ACVC U7 U8 IC6 ;* 6847 6847/6847T1 TCC1014 ;* ;* MODULATOR U12 U9 IC103 ;* 1372 1372 1377 ;* ;* SAM/MMU U10 U22 IC6 ;* 6883 6883 TCC1014 ;* ;* MPU U1 U23 IC1 ;* 6809E/6309E 6809E/6309E 68B09E/63B09E ;* ;* TEST MPU ;* DETECT COCO1, COCO2, OR COCO3 - VECTORS? ;* DETECT AMOUNT OF WORKSPACE RAM 4-64K ;* COCO3 DETECT AMOUNT OF EXTENDED RAM 128-512K (2048?) ;* CRC EXPANSION ROM ;* CRC BASIC ROM ;* DETECT MPI ;* DETECT SLOT1 ;* DETECT SLOT2 ;* DETECT SLOT3 ;* DETECT SLOT4 ;* CRC CART ROM ;* CRC UPPER CART ROM ;* SETUP PIA0 ;* SETUP MUX ;* SETUP PIA1 ;* SETUP DAC? ;* COCO 1/2 DETECT VDG 6847, 6847T1, COCOVGA ;* COCO 1/2 SETUP VDG - RF/COMPOSITE ;* COCO 3 DETECT ACVC 1986, 1987, GIMEX ;* COCO 3 SETUP ACVC - RF/COMPOSITE/RGB ;* COCO 1/2 SETUP MODULATOR? - B/W MONOCHROME COLOR ;* SETUP ACVC PALETTE ;* COCO1/2 SETUP SAM ;* COCO3 SETUP MMU ;* COCO1/2 SETUP MPU: VECTORS, STACKS, DIRECTPAGE ;* COCO3 SETUP MPU: VECTORS, STACKS, DIRECTPAGE ;* ;* AX2 BIOS/DETECTION ;* ;* COMPUTER PLATFORM ;* [ ] 1980 CoCo 1 ;* [ ] 1982 CoCo 2 ;* [ ] 1985 CoCo 3 ;* [ ] Dragon32 ;* [ ] Dragon64 ;* [ ] Tano Dragon ;* [ ] TDP100 ;* [ ] Codimex 6809 ;* [ ] MX1600 ;* [ ] Lazer 64 ;* [+] 2007 CoCoFPGA (Gary Becker) John Kent Core ;* [+] 2015 CoCoFPGA Expansion Board (Gary Becker/Ed Snider) ;* [+] 2015 CoCoFPGA Terasic DE2 Port (Leslie Ayling) ;* [+] 2018 CoCoFPGA Terasic DE2-115 Port (Stan Hodge) ;* [+] 2019 CoCoDEV (Dave Phillipsen) John Kent Core ;* [+] Matchbox CoCo (Roger Taylor) Greg Miller Core ;* [+] Mist CoCo ;* [+] Mister CoCo ;* [+] Xroar ;* [+] MAME ;* [+] VCC ;* [+] OVCC ;* ;* MICRO-PROCESSOR UNIT (MPU) ;* [ ] 6809 ;* [+] 6309 ;* ;* RANDOM ACCESS MEMORY (RAM) ;* [ ] 4K ;* [ ] 16K ;* [ ] 32K ;* [ ] 64K ;* [ ] 128K ;* [+] 256K ;* [ ] 512K ;* [+] 1024K ;* [+] 2048K ;* [+] 8192K ;* ;* READ ONLY MEMORY (ROM) ;* COLOR BASIC ;* [ ] 1.0 ;* [ ] 1.1 ;* [ ] 1.2 ;* [ ] 1.3 ;* ;* EXTENDED COLOR BASIC ;* [ ] 1.0 ;* [ ] 1.1 ;* [ ] 2.0 ;* ;* SUPER EXTENDED COLOR BASIC ;* [ ] 2.0 ;* [ ] 2.1 (WHEN DOS PRESENT) ;* ;* MEMORY MAPPING UNIT (MMU) ;* [ ] Synchronous Address Multiplexer (SAM) ;* [ ] Advanced Color Video Chip (ACVC) ;* ;* VIDEO DISPLAY GENERATOR (VDG) ;* [ ] MC6847 ;* [ ] MC6847T1 ;* [+] CoCoVGA ;* [ ] GIME 1986 ;* [ ] GIME 1987 ;* [+] GIME-X ;* ;* AUDIO ;* [ ] 1-bit ;* [ ] 6-bit Digital Analog Converter (DAC) ;* [ ] Orchestra-90/CC / CoCoDAC-16 / Stereo Pak ;* [ ] Speech/Sound Cartridge (SSC) ;* [+] Symphony-12 / Philharmonic-12 ;* [+] Stereo Composer ;* [+] CoCoMIDI ;* [+] CoCoPSG Programmable Sound Generator ;* [+] MegaMini Multi-Pak Interface (MPI) ;* [+] Games Master Cartridge (GMC) ;* [+] CoCoSound ;* [+] SirSound ;* ;* SPEECH ;* [ ] Speed/Sound Cartridge (SSC) ;* [+] The Voice ;* [+] SuperVoice ;* [+] RealTalker ;* ;* CLOCK ;* [ ] Vertical Synchronization 60Hz ;* [ ] Vertical Synchronization 50Hz ;* [+] Real Time Clock (RTC) ;* [+] DriveWire Clock ;* ;* SERIAL ;* [ ] "Bit Banger" ;* [ ] Deluxe RS-232 Pak ;* [ ] Direct Connect Modem Pak ;* [+] DriveWire Serial ;* ;* JOYSTICKS ;* [ ] "Black Beauty" Joysticks ;* [ ] Deluxe 1-button ;* [ ] Deluxe 2-button ;* [+] Atari VCS / 2600 ;* [+] SEGA Adapter + more buttons ;* ;* HIGH RESOLUTION JOYSTICK ADAPTER ;* [ ] Hardware ;* [+] Software Driver ;* ;* MULTI-PAK INTERFACE (MPI) ;* [ ] Multi-Pak v1 (CoCo1) ;* [ ] Multi-Pak v2 (CoCo2) ;* [ ] Multi-Pak v3 (CoCo3) ;* [+] Y-Cable ;* [+] Mini MPI ;* [+] Mega Mini MPI ;* ;* STORAGE ;* [ ] Cassette ;* [ ] FDC ;* [+] HDC ;* [+] SDC ;* ;* STORAGE ROM ;* [ ] FDC DOS 1.0 ;* [ ] FDC DOS 1.1 ;* [+] RGB DOS ??? ;* [+] HDB DOS 1.0 - 1.5 ;* [+] SuperDOS ;* [+] DWDOS ;* [+] SDC DOS 1.0 - 1.6 ;* [+] YA-DOS 0.1 - 0.5 ;* ;* OTHER ;* [+] Becker Port ;* ;* Include Files: none ;* ;* Assembler: lwasm 1.4.2 ;* ;* Revision History: ;* Rev # Date Who Comments ;* ----- ----------- ------ --------------------------------------- ;* 00 2020-2021 RAM Created ;********************************************************************* ;********************************************************************* ;* EQUATES AND VARIABLES - FIXME ;********************************************************************* ;MPU6809: EQU $08 ;MPU6309: EQU $03 ;MPUTEST1: RMB 1 ; RESULT OF FIRST MPU ID TEST ;MPUTEST2: RMB 1 ; RESULT OF OTHER MPU ID TEST ;VECRESET: RMB 2 ; MPU 6X09 RESET VECTOR ;VECNMI: RMB 2 ; MPU 6x08 NMI VECTOR ;VECSWI: RMB 2 ; MPU 6x08 SWI VECTOR ;VECIRQ: RMB 2 ; MPU 6x08 IRQ VECTOR ;VECFIRQ: RMB 2 ; MPU 6x08 FIRQ VECTOR ;VECSWI2: RMB 2 ; MPU 6x08 SWI2 VECTOR ;VECSWI3: RMB 2 ; MPU 6x08 SWI3 VECTOR ;VECTRAP: RMB 2 ; 6309 MPU TRAP VECTOR ;STACKS: RMB 2 ; MPU 6X09 SYSTEM STACK VECTOR ;STACKU: RMB 2 ; MPU 6X09 USER STACK VECTOR ;REGDP: RMB 1 ; MPU 6X09 DIRECT PAGE REGISTER CKSUM8: RMB 2 ; ROM 8000-9FFF CHECKSUM CKSUMA: RMB 2 ; ROM A000-BFFF CHECKSUM CKSUMC: RMB 2 ; ROM C000-DFFF CHECKSUM CKSUME: RMB 2 ; ROM E000-FDFF CHECKSUM ;********************************************************************* ;* TEST MPU - VERIFY CORE 6X09 INSTRUCTIONS ARE RELIABLE ;********************************************************************* ;* FIXME ;********************************************************************* ;* RoutineName - expanded name or phrase describing purpose ;* Brief description ;* ;* I/O: what is expected and produced ;* ;* Calling Convention: how is this called? ;* ;* Returns: ;* ;* Stack Usage: (when needed) structure of stacked data ;* ;* Calls: Info about routines called ;* ;* Changes: registers destroyed. ;********************************************************************* ;***************************************************************************** ;* DETECT MPU 6809, 6309 METHOD 1 ;***************************************************************************** ;* The 6309 Book Copyright (c) 1992,1993 Burke & Burke ;* Chris Burke ;* Determine whether processor is 6309 or 6809 ;* Returns Z clear if 6309, set if 6809 ;* CHK309 PSHS D ;Save Reg-D ;* FDB $1043 ;6309 COMD instruction (COMA on 6809) ;* CMPB 1,S ;not equal if 6309 ;* PULS D,PC ;exit, restoring D CHK6X09: PSHU D ; SAVE REG-D FDB $1043 ; 6309 COMD (COMA ON 6809) CMPB 1,S ; NOT EQUAL IF 6309 ; BEQ IS6809 ;IS6309: LDA #MPU6309 ; BRA NEXT1 ;IS6809: LDA #MPU6809 ;NEXT1: STA MPUTEST1 PULU D ;********************************************************************* ;* RoutineName - expanded name or phrase describing purpose ;* Brief description ;* ;* I/O: what is expected and produced ;* ;* Calling Convention: how is this called? ;* ;* Returns: ;* ;* Stack Usage: (when needed) structure of stacked data ;* ;* Calls: Info about routines called ;* ;* Changes: registers destroyed. ;********************************************************************* ;***************************************************************************** ;* DETECT MPU 6809, 6309 METHOD 2 ;***************************************************************************** ;* 10 '6309/6809 CPUID PROGRAM ;* 20 'FOR THE COCO/COCOIII ;* 30 'AND DRAGON 32/64 ;* 40 'BY STEPHEN J WOOLHAM ;* 50 ' ;* 60 START=&HD00 ;* 70 FOR I=START TO START+15:READ A$:POKEI,VAL("&H"+A$):C=C+PEEK(I):NEXT: ;* IF C <> 1363 THEN PRINT"ERROR IN DATALINE":END ;* 80 EXEC START ;* 90 IF PEEK(157)=3 THEN CPU$="6309"ELSE IF PEEK(157)=9 THEN CPU$="6809" ;* 100 PRINT"A "+CPU$+" CPU IS PRESENT...":END ;* 110 DATA C6,FF,10,4F,5D,27,04,86,9,20,2,86,3,97,9D,39 ;* 0D00: C6 FF LDB #$FF ;* 0D02: 10 4F CLRD ;* 0D04: 5D TSTB ;* 0D05: 27 04 BEQ $0D0B ;* 0D07: 86 09 LDA #$09 ;* 0D09: 20 02 BRA $0D0D ;* 0D0B: 86 03 LDA #$03 ;* 0D0D: 97 9D STA $9D ;* 0D0F: 39 RTS ;** ;CHK6X092: PSHU D ; LDB #$FF ; CLRD ; TSTB ; BEQ HD6309 ;MC6809: LDA #MPU6809 ; BRA NEXT2 ;HD6309: LDA #MPU6309 ;NEXT2: STA MPUTEST2 ; PULU D ;********************************************************************* ;* CHKNTV - Determine whether processor is in Emulation or Native Mode ;* Works for 6809 or 6309. ;* Returns Z clear if Emulation (or 6809), Z set if Native ;* The 6309 Book by Chris Burke p 4-2 ;* ;* I/O: what is expected and produced ;* ;* Calling Convention: how is this called? ;* ;* Returns: ;* ;* Stack Usage: (when needed) structure of stacked data ;* ;* Calls: Info about routines called ;* ;* Changes: registers destroyed. ;********************************************************************* ; ;CHKNTV: PSHSW ; Ignored on 6809 (no stack data) ; PSHS U,Y,X,DP,D,CC ; Save all registers ; LEAU CHKX68,PCR ; Special exit for 6809 processor ; LDY #0 ; PSHS U,Y,X,D ; Push 6809 trap, Native marker, PC temps ; ORCC #$D0 ; Set CC.E (entire), no interrupts ; PSHS U,Y,X,DP,D,CC ; Save regs ; LEAX CHKXIT,PCR ; STX 10,S ; Preset Emulation mode PC slot ; STX 12,S ; Preset Native mode PC slot ; RTI ; End up at CHKXIT next ;CHKXIT: LDX ,S++ ; In NATIVE, get 0; in EMULATION, non-zero ; BEQ CHKNTV9 ; LEAS 2,S ; Discard native marker in EMULATION mode ;CHKNTV9: TFR CC,A ; ANDA #$0F ; Keep low CC value ; AIM #$F0,0,S ; Keep high bits of stacked CC ; ORA 2,S ; Combine CC values (skip over 6809 trap) ; STA 2,S ; and save on stack ; PULSW ; Pull bogus W (does RTS to CHKX68 on 6809) ; PULS CC,D,DP,X,Y,U ; Restore 6309 registers and return ; PULSW ; RTS ;CHKX68: PULS CC,D,DP,X,Y,U,PC ; Restore 6809 registers and return ;********************************************************************* ;* SETPMD - SET NATIVE MODE 6309 and 6809 FIRQ handling ;* The 6309 Book by Chris Burke pp 4-3 and 4-4 ;* Works for 6309 only. ;* ;* I/O: what is expected and produced ;* Bit 0 Emulation Mode (0) or Native Mode (1) ;* Bit 1 6809 FIRQ (0) or 6309 IRQ-Like FIRQ (1) ;** LDMD #$01 ;* ;* Calling Convention: how is this called? ;* Force processor to Emulation Mode or Native Mode, ;* depending on value in Register A ;* A=0 Emulation Mode ;* A<>0 Native Mode ;* ;* Returns: ;* ;* Stack Usage: (when needed) structure of stacked data ;* ;* Calls: Info about routines called ;* ;* Changes: registers destroyed. ;********************************************************************* ;SETPMD: TSTA ; BNE SETNTV ; LDMD #$00 ; Force Emulation Mode, normal FIRQ ; BRA SETPND ;SETNTV: LDMD #$01 ; Force Native Mode, normal FIRQ ;SETPND: RTS ;********************************************************************* ;* RoutineName - expanded name or phrase describing purpose ;* Brief description ;* ;* I/O: what is expected and produced ;* ;* Calling Convention: how is this called? ;* ;* Returns: ;* ;* Stack Usage: (when needed) structure of stacked data ;* ;* Calls: Info about routines called ;* ;* Changes: registers destroyed. ;********************************************************************* LDX #$8000 CKROM8: ADDD ,X+ CMPX #$9FFF BNE CKROM8 STD CKSUM8 ;********************************************************************* ;* RoutineName - expanded name or phrase describing purpose ;* Brief description ;* ;* I/O: what is expected and produced ;* ;* Calling Convention: how is this called? ;* ;* Returns: ;* ;* Stack Usage: (when needed) structure of stacked data ;* ;* Calls: Info about routines called ;* ;* Changes: registers destroyed. ;********************************************************************* LDX #$A000 CKROMA: ADDD ,X+ CMPX #$BFFF BNE CKROMA STD CKSUMA ;********************************************************************* ;* RoutineName - expanded name or phrase describing purpose ;* Brief description ;* ;* I/O: what is expected and produced ;* ;* Calling Convention: how is this called? ;* ;* Returns: ;* ;* Stack Usage: (when needed) structure of stacked data ;* ;* Calls: Info about routines called ;* ;* Changes: registers destroyed. ;********************************************************************* LDX #$C000 CKROMC: ADDD ,X+ CMPX #$DFFF BNE CKROMC STD CKSUMC ;********************************************************************* ;* RoutineName - expanded name or phrase describing purpose ;* Brief description ;* ;* I/O: what is expected and produced ;* ;* Calling Convention: how is this called? ;* ;* Returns: ;* ;* Stack Usage: (when needed) structure of stacked data ;* ;* Calls: Info about routines called ;* ;* Changes: registers destroyed. ;********************************************************************* LDX #$E000 CKROME: ADDD ,X+ CMPX #$FDFF BNE CKROME STD CKSUME ;********************************************************************* ;* End of code-config-v00.asm ;*********************************************************************