diff --git a/debian/changelog b/debian/changelog index 581e78d..0ec04d8 100755 --- a/debian/changelog +++ b/debian/changelog @@ -1,12 +1,10 @@ -a2pi (0.2.0) unstable; urgency=low -======= +a2pi (0.2.0-1) unstable; urgency=low * Add support for Raspberry Pi version 2 -- David Schmenk Sun, 22 Feb 2015 13:27:30 -0800 a2pi (0.1.8-8) unstable; urgency=low -======= * Full ROM build * Add a2pi logo with transparent background diff --git a/debian/postinst b/debian/postinst index 50c5509..afdfda7 100755 --- a/debian/postinst +++ b/debian/postinst @@ -64,7 +64,7 @@ case "$1" in if [ -e /usr/share/a2pi/A2VD1.PO ] || [ -L /usr/share/a2pi/A2VD1.PO ] ;then rm /usr/share/a2pi/A2VD1.PO fi - ln -s /usr/share/a2pi/A2PI-1.4.PO /usr/share/a2pi/A2VD1.PO + ln -s /usr/share/a2pi/A2PI-1.5.PO /usr/share/a2pi/A2VD1.PO fi if [ ! -s /usr/share/a2pi/A2VD2.PO ] ; then if [ -e /usr/share/a2pi/A2VD2.PO ] || [ -L /usrshare/a2pi/A2VD2.PO ] ; then diff --git a/pidrive/Makefile b/pidrive/Makefile index 0ddf6d8..54e01b4 100755 --- a/pidrive/Makefile +++ b/pidrive/Makefile @@ -1,6 +1,7 @@ .SUFFIXES = AFLAGS = -o $@ -ROM = ROM\#062000 +SIROM = SIROM\#062000 +PIROM = PIROM\#062000 VDRV = PIDRIVE\#062000 VCLK = PICLOCK\#062000 # @@ -11,14 +12,18 @@ BINTYPE = \#060000 SYSTYPE = \#ff0000 TXTTYPE = \#040000 -all: $(ROM) $(VDRV) $(VCLK) +all: $(SIROM) $(PIROM) $(VDRV) $(VCLK) clean: - -rm $(ROM) $(VDRV) $(VCLK) *.o *~ + -rm $(SIROM) $(PIROM) $(VDRV) $(VCLK) *.o *~ -$(ROM): rom.s - ca65 rom.s -o rom.o - ld65 -o $(ROM) -C rom.cfg rom.o +$(SIROM): sirom.s romincs.s cxrom.s c8rom.s + ca65 sirom.s -o sirom.o + ld65 -o $(SIROM) -C sirom.cfg sirom.o + +$(PIROM): pirom.s romincs.s cxrom.s c8rom.s + ca65 pirom.s -o pirom.o + ld65 -o $(PIROM) -C pirom.cfg pirom.o $(VDRV): pidrive.s ca65 pidrive.s -o pidrive.o diff --git a/pidrive/PROGROM#FC0801 b/pidrive/PROGROM#FC0801 index 6ff9418..1959706 100755 Binary files a/pidrive/PROGROM#FC0801 and b/pidrive/PROGROM#FC0801 differ diff --git a/pidrive/c8rom.s b/pidrive/c8rom.s new file mode 100755 index 0000000..df352be --- /dev/null +++ b/pidrive/c8rom.s @@ -0,0 +1,242 @@ +;**************************************** +;* +;* OPTION ROM SPACE @ $C800 +;* +;**************************************** +;* +;* RETURN SLOT*16 IN X REG, SLOT IN Y REG +;* +GETSLOT: + TSX + LDA $102,X ; GET MSB OF RETURN ADDRESS + STA IOSLOT + AND #$0F + TAY + LDA SLOT16 + STA SAVE16,Y ; SAVE SLOT16 LOCATION + TYA + ASL + ASL + ASL + ASL + STA SLOT16 + TAX + RTS +;* +;* OUTPUT BYTE TO ACIA +;* +SENDACC: + PHA + LDA SLOT16 + ORA #$89+1 ; ACIASR + TAX +SENDWT: LDA $C000-1,X + AND #$10 + BEQ SENDWT + DEX ; ACIADR + PLA + STA $C000-1,X ; AVOID PHANTOM READ OF DATA REG + RTS +;* +;* INPUT BYTE FROM ACIA +;* +RECVACC: + LDX SLOT16 +RECVWT: LDA ACIASR,X + AND #$08 + BEQ RECVWT + LDA ACIADR,X + RTS +;* +;* WAIT FOR DELAY +;* +WAIT: SEC +WAIT2: PHA +WAIT3: SBC #$01 + BNE WAIT3 + PLA + SBC #$01 + BNE WAIT2 + RTS +;* +;* SYNC WITH HOST +;* +SYNC: LDA INDCTR + PHA + LDA #$0B + STA ACIASR,X ; RESET STATUS REGISTER + STA ACIACR,X ; SET CONTROL REGISTER + LDA #$10 + STA ACIAMR,X ; SET COMMAND REGISTER (115K BAUD) + LDA #$80 + JSR WAIT + STA STROBE ; CLEAR KEYBOARD STROBE +SYNCLP: LDA #SYNC_REQ + JSR SENDACC + INY + TYA + AND #$07 + TAY + LDA SPIN,Y + STA INDCTR + LDA #$FF + JSR WAIT + LDA KEYBD + BPL CHKRSP + STA STROBE + PLA +.IFNDEF DEBUG + STA INDCTR +.ENDIF +NODEV: LDA #PDNODEV + RTS +SPIN: DB $A1, $AF, $AD, $DC, $A1, $AF, $AD, $DC +CHKRSP: LDX SLOT16 + LDA ACIASR,X + AND #$08 + BEQ SYNCLP + LDA ACIADR,X + CMP #SYNC_ACK + BNE SYNCLP + LDA IOSLOT + AND #$0F + TAY + LDA #SYNC_ACK + STA SYNCED,Y + PLA +.IFNDEF DEBUG + STA INDCTR +.ENDIF + LDA #$00 + RTS +RESYNC: JSR SYNC + BEQ DOCMD + RTS +;* +;* DO STATUS, READ, WRITE COMMAND +;* +DOCMD: LDA ACIACR,X ; CHECK FOR ANY REASON TO RESYNC + CMP #$0B + BNE RESYNC + LDA ACIAMR,X + CMP #$10 + BNE RESYNC + LDA SYNCED,Y + CMP #SYNC_ACK + BNE RESYNC + LDA PDUNIT ; FORMAT COMMAND FOR SIDRIVE AND SEND IT + ASL + LDA PDCMD + ROL + ASL + ORA #$A0 + JSR SENDACC + CLC + ADC #$01 + STA CMDACK,Y + LDA PDBLKL + JSR SENDACC + LDA PDBLKH + JSR SENDACC +CHKACK: JSR RECVACC ; WAIT FOR CORRECT ACK (MAY BE OUTSTANDING A2PI REQUESTS) + CMP CMDACK,Y + BNE CHKACK +;* +;* BRANCH TO COMMAND HANDLER +;* + LDA PDCMD + AND #$03 + TAY ; CPY #PDSTATUS + BEQ STATUS + DEY ; CPY #PDREAD + BEQ RDBLK + DEY ; CPY #PDWRITE + BEQ WRBLK +.IFDEF DEBUG + LDA #'?' + STA INDCTR+6 +.ENDIF +IOERR: LDA #PDIOERR + RTS +;* +;* SIDRIVE STATUS - RETURN NUMBER OF BLOCKS OR NODEV +;* +STATUS: +.IFDEF DEBUG + LDA #'S'-$40 + STA INDCTR+3 +.ENDIF + LDA IOSLOT + AND #$0F + TAY + JSR RECVACC + STA SCRTCH6,Y + JSR RECVACC + STA SCRTCH7,Y + JSR RECVACC + PHA + LDX SCRTCH6,Y + LDA SCRTCH7,Y + TAY + PLA + RTS +;* +;* READ A BLOCK (512 BYTES) FROM SIDRIVE +;* +RDBLK: +.IFDEF DEBUG + LDA #'R'-$40 ; LDY #$00 + STA INDCTR+4 +.ENDIF +RDBLKL: JSR RECVACC + STA (PDBUFF),Y + INY + BNE RDBLKL + INC PDBUFH +RDBLKH: JSR RECVACC + STA (PDBUFF),Y + INY + BNE RDBLKH + JMP RECVACC +;* +;* WRITE A BLOCK (512 BYTES) TO SIDRIVE +;* +WRBLK: +.IFDEF DEBUG + LDA #'W'-$40 ; LDY #$00 + STA INDCTR+5 +.ENDIF +WRBLKL: LDA (PDBUFF),Y + JSR SENDACC + INY + BNE WRBLKL + INC PDBUFH +WRBLKH: LDA (PDBUFF),Y + JSR SENDACC + INY + BNE WRBLKH + JMP RECVACC +.IFDEF ALTBOOT +;* +;* PRINT THE BOOT MESSAGE AT THE TOP OF THE SCREEN +;* +PUTMSG: LDY #$00 +PUTC: LDA MSG,Y + BMI FILLEOL + ORA #$80 + STA MSGLN,Y + INY + BNE PUTC +MSG: DB "PRESS 'M' FOR BOOT MENU", $A0 +;* +;* CLEAR THE MESSAGE AT THE TOP OF THE SCREEN +;* +CLRMSG: LDY #$00 + LDA #$A0 +FILLEOL: + STA MSGLN,Y + INY + CPY #40 + BNE FILLEOL + RTS +.ENDIF diff --git a/pidrive/cxrom.s b/pidrive/cxrom.s new file mode 100755 index 0000000..53020e6 --- /dev/null +++ b/pidrive/cxrom.s @@ -0,0 +1,147 @@ +;**************************************** +;* +;* SLOT INDEPENDENT ROM CODE @ $Cn00 +;* +;**************************************** +CXSLOT EQU * +;* +;* AUTOSTART BOOT SIGNATURE +;* + LDX #$20 + LDY #$00 + LDX #$03 + STX $3C +;* +;* AUTOSTART/PR# ENTRYPOINT +;* +.IFDEF DEBUG + LDA #'*' + STA INDCTR+7 +.ENDIF + PHP + SEI + STA XROMOFF +.IFDEF PIROM + LDA #$01 + STA BANKSEL +.ENDIF + JSR GETSLOT + LDA #$00 + STA SYNCED,Y ; CLEAR SYNCED FLAG + JSR SYNC + BNE NOBOOT +;* +;* CREATE COMMAND BUFFER FOR BOOT BLOCK +;* + STX PDUNIT ; SLOT * 16, DEV 0 + LDX #$00 + STX PDBLKL + STX PDBLKH + STX PDBUFL + INX ; LDX #PDREAD + STX PDCMD + LDX #$08 + STX PDBUFH +.IFDEF ALTBOOT + STA STROBE + JSR PUTMSG + LDX #$10 +BOOTMSG: + LDA #$FF + JSR WAIT + LDA KEYBD + BPL BOOTDELAY + STA STROBE + LDX #$01 + CMP #'M'+$80 + BEQ :+ + CMP #'m'+$80 + BNE BOOTDELAY +: LDA #SIBOOT ; LOAD SI BOOT PROGRAM + STA PDCMD +BOOTDELAY: + DEX + BNE BOOTMSG + JSR CLRMSG + LDA IOSLOT + AND #$0F + TAY +.ENDIF +BOOT: LDX SLOT16 + JSR DOCMD ; READ BOOT BLOCK + PLP + PHA + LDA IOSLOT + AND #$0F + TAY + LDA SAVE16,Y ; SAVED ORIGINAL SLOT16 VALUE + STA SLOT16 + PLA + BNE NOBOOT + JMP $801 ; JUMP TO BOOT BLOCK +NOBOOT: LDA $00 + BEQ AUTOSTART + RTS +AUTOSTART: + JMP $FABA ; JUMP BACK TO AUTOSTART BOOT SCANNER ROM +;* +;* PRODOS INTELLIGENT DEVICE ENTRYPOINT +;* +CMDENTRY: + PHP + SEI + STA XROMOFF +.IFDEF PIROM + LDA #$01 + STA BANKSEL +.ENDIF + JSR GETSLOT +.IFDEF DEBUG + LDA PDCMD + ORA #'0' + STA INDCTR+1 +.ENDIF + JSR DOCMD + PLP + PHA ; RESTORE ORIGINAL SLOT16 VALUE + TYA + PHA + LDA IOSLOT + AND #$0F + TAY + LDA SAVE16,Y ; SAVED ORIGINAL SLOT16 VALUE + STA SLOT16 + PLA + TAY + PLA +;* +;* CHECK FOR ERROR +;* + BNE CMDERR + CLC ; ALL GOOD, CLEAR ERROR FLAG + RTS +CMDERR: +.IFDEF DEBUG + PHA + STA $2FF + LDA #'E'-$40 + STA INDCTR+2 +: LDA KEYBD + BPL :- + STA STROBE + CMP #'M'+$80 + BNE :+ + LDA ROMEN + JMP MONITOR +: PLA +.ENDIF + SEC ; SET ERROR FLAG + RTS +ENDCMD: + .REPEAT CXSLOT+250-* + DB $00 + .ENDREP + DB SIG ; SIGNATURE + DW 0 ; USE STATUS TO GET SIZE + DB $97 ; REMOVEABLE, 2 DEVICES, R/W + DB (500/271) MHz */ - sleep(1); /* give clock chance to settle down */ + //sleep(1); /* give clock chance to settle down */ } #endif /* diff --git a/src/gpclk.c b/src/gpclk.c index 462310f..4bf75e2 100755 --- a/src/gpclk.c +++ b/src/gpclk.c @@ -41,8 +41,8 @@ volatile unsigned int *setup_io(int reg_base) // open /dev/mem if ((mem_fd = open("/dev/mem", O_RDWR|O_SYNC) ) < 0) { - printf("can't open /dev/mem \n"); - exit(-1); + printf("can't open /dev/mem \n"); + exit(-1); } // mmap IO io_map = mmap(NULL, //Any adddress in our space will do @@ -54,8 +54,8 @@ volatile unsigned int *setup_io(int reg_base) close(mem_fd); //No need to keep mem_fd open after mmap if (io_map == MAP_FAILED) { - printf("mmap error %d\n", (int)io_map);//errno also set! - exit(-1); + printf("mmap error %d\n", (int)io_map);//errno also set! + exit(-1); } return (volatile unsigned *)io_map; } @@ -73,12 +73,12 @@ void gpclk(int idiv) unsigned int arm_base = ARMv6_PERI_BASE; // Default to ARMv6 peripheral base FILE *cpuinfo; - char keystr[256], valstr[128]; + char keystr[1024], valstr[128]; if ((cpuinfo = fopen("/proc/cpuinfo", "r") ) == NULL) { - printf("can't open /proc/cpuinfo\n"); - exit(-1); + printf("can't open /proc/cpuinfo\n"); + exit(-1); } while (!feof(cpuinfo)) {