1000 OPEN1,8,1,"0:SENDCODE.OBJ" 1010 SYS 700 ;ACTIVATE PAL ASSEMBLER 1020 *= $9F92 ;TOP OF MEMORY (40850) 1030 .OPT O1 ;OUTPUT OBJECT FILE 1031 ; 1040 ; OUTPUT CODE TO SERIAL DATA PORT 1050 ; 1060 ;THIS ROUTINE CAN BE USED TO SEND 1070 ;YOUR CODE TO THE TARGET COMPUTER 1080 ;AFTER IT HAS BEEN ASSEMBLED. 1090 ;CALL IT FROM YOUR ASSEMBLER 1100 ;ENVIRONMENT AND PASS IT THE START 1110 ;AND END ADDRESSES OF THE OBJECT 1120 ;CODE, E.G. SYS 40850,49152,50261 1130 ; 1140 ;THE ROUTINE 'SENDTOSDP' SENDS THE 1150 ;ADDRESS TO STORE (LOW/HIGH) 1160 ;IN THE OTHER C64 AND THE BYTE TO 1170 ;STORE THERE. 1180 ; 1190 U2TIMALO = $DD04 1200 U2TIMAHI = $DD05 1210 U2OUT = $DD0C ;SER DATA PORT 1220 U2ICR = $DD0D ;INTERRUPT CTRL 1230 U2CRA = $DD0E ;TIMER A CTRL 1240 OUTPUT = %01000000 ;$DD0E BIT 6 1250 SHIFTREG = %00001000 ;$DD0D BIT 3 1260 DISABLALL = %01111111 ;CLR INTS 1270 TIMERA = %00000001 ;$DD0E BIT 0 1280 ; 1290 CODEPTR = $FB ;PTR TO BYTE TO SEND 1300 ENDCODE = $FD ;LAST BYTE TO SEND 1310 ; 1320 BAUD = $04 ;BAUD RATE PRESCALER 1330 ; 1340 ; 1360 SENDCODE =* 1370 JSR GETPARAM ;START ADDR IN Y,A 1380 STA CODEPTR+1 1390 STY CODEPTR 1400 JSR GETPARAM ;GET END ADDRESS 1410 STA ENDCODE+1 1420 STY ENDCODE 1430 ; 1440 SC1 =* ;SEND ALL BYTES 1450 LDY #0 1460 LDA (CODEPTR),Y;GET NEXT BYTE 1470 JSR SENDTOSDP ;SEND IT TO PORT 1480 INC CODEPTR ;POINT TO NEXT BYTE 1490 BNE SC2 1500 INC CODEPTR+1 1510 SC2 =* ;END WHEN CODEPTR = ENDCODE 1520 LDA CODEPTR 1530 CMP ENDCODE 1540 BNE SC1 1550 LDA CODEPTR+1 1560 CMP ENDCODE+1 1570 BNE SC1 1580 RTS 1590 ; 1600 ; 1610 SENDTOSDP =* 1620 ;SEND 'CODEPTR' POINTER USER PORT, 1630 ;FOLLOWED BY BYTE IN .A 1640 STA DATAOUT ;BYTE OF CODE TO SEND 1650 LDA CODEPTR ;ADDR OF BYTE TO SEND 1660 STA DATAOUT+2 1670 LDA CODEPTR+1 1680 STA DATAOUT+1 1690 ; 1700 LDA #DISABLALL 1710 STA U2ICR ;CLEAR ALL INTERRUPTS 1720 ; 1730 LDA #BAUD ;SET UP TIMER 1740 STA U2TIMALO 1750 LDA #0 1760 STA U2TIMAHI 1770 ; 1780 LDA #OUTPUT+TIMERA 1790 ;SET UP TIMER CONTROL REGISTER 1800 STA U2CRA 1810 ; 1820 LDX #2 1830 ;SEND 3 BYTES STARTING AT DATAOUT 1840 SEI ;NO INTERRUPTS, PLEASE 1850 OUTDATA =* 1860 LDA DATAOUT,X 1870 STA U2OUT ;PUT BYTE ON THE PORT 1880 ; 1890 LDA #SHIFTREG 1900 STILLSDG =* 1910 ;WAIT UNTIL IT HAS BEEN SENT 1920 BIT U2ICR 1930 BEQ STILLSDG 1940 DEX ;SEND THE NEXT ONE 1950 BPL OUTDATA 1960 CLI ;ALL 3 BYTES SENT 1970 ; 1980 RTS 1990 ; 2020 ; 2030 GETPARAM =* 2040 ;SKIP COMMA, GET ARGUMENT AND PUT 2050 ;IN Y (LOW) AND A (HIGH) 2060 JSR $AEFD 2070 JSR $AD8A 2080 JMP $B7F7 2090 ; 2091 ; 3000 DATAOUT *=*+3 3010 ;BUFFER FOR ADDR AND BYTE TO SEND