From 74d501f8892415a6f4113ed1fe8608b178863953 Mon Sep 17 00:00:00 2001 From: Eric Rangell Date: Sun, 22 Jul 2018 01:27:48 -0500 Subject: [PATCH] Fixed comments, added entry points for 2 config routines, disable interrupts during critical section --- .DS_Store | Bin 12292 -> 12292 bytes .../UserInterfaceState.xcuserstate | Bin 32774 -> 42938 bytes SRC/A2NoSlotMidi/MIDIDRVR.OBJ | Bin 424 -> 437 bytes SRC/A2NoSlotMidi/MIDIDRVR.OBJ.dsk | Bin 143360 -> 143360 bytes SRC/A2NoSlotMidi/MIDIDRVR.OBJ.map | 4 +- SRC/A2NoSlotMidi/main.lst | 481 +++++++++--------- SRC/A2NoSlotMidi/main.o | Bin 3771 -> 3927 bytes SRC/A2NoSlotMidi/main.s | 37 +- SRC/A2NoSlotMidi/make/V2Make.scpt | Bin 4978 -> 5030 bytes 9 files changed, 276 insertions(+), 246 deletions(-) diff --git a/.DS_Store b/.DS_Store index e0e39d295c579995dae89541601bf5257e1dbf62..f8a4d98381f74ed00c93db78feb70664dc5d18b0 100644 GIT binary patch delta 39 vcmZokXi1ph&nUYwU^hRb&}JTiwVa%3DaFZ2`T04Fo7YQvvTf#8_{k3d3KtD8 delta 32 ocmZokXi1ph&nUAoU^hRb;AS3ywVa#JNZPYaY!Keet?-i{0J+`^4gdfE diff --git a/SRC/A2NoSlotMidi.xcodeproj/project.xcworkspace/xcuserdata/ericrangell.xcuserdatad/UserInterfaceState.xcuserstate b/SRC/A2NoSlotMidi.xcodeproj/project.xcworkspace/xcuserdata/ericrangell.xcuserdatad/UserInterfaceState.xcuserstate index 0f771413bc665da17121dc29813185df77e612b7..4f44096ebb0e010d51cf5a142b807459f406e747 100644 GIT binary patch delta 22903 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
g-Rs7tU4t# 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 diff --git a/SRC/A2NoSlotMidi/MIDIDRVR.OBJ b/SRC/A2NoSlotMidi/MIDIDRVR.OBJ index 697b5b32f29ef3d11db45beee27ddc3e1fdea87a..90bf344fe22130298e909e429939622f00dd816a 100644 GIT binary patch literal 437 zcmb8quTH~Y6b0~O2n!xC+h{^a5PO7*CbQoIZ0@tX!M(Yc4OMdv$5w_p#BTUqq+=CJOwmQ_-JZ|I>HhL>Ir^T6I0oYkKO!LlZF}X2gPokT4R# zfG}VT1Vh4*F%*mlBgRNDCX5+l!GthjOav(*Wu$^BVak{aGD6141T(^nF%!%QbH-e- ZAS@UQK~BgSxnN0HGM0iBVZ~Spz5oKDzn}mB literal 424 zcmb8qyGjFL5J2J6Dd~hH3O4%yDO09cNV^Y^blds{^E34}fyfAUHd+K(A(GAJes2`3 zsMUgxklM;h#jx5s#qgbCiV2P_wxDXksRbVvyjid_pwirgovdB7Ym%*3wWr6dlfArm zixy>JyJY8OE8NALHQEo>+H0L_nk&uK&2^jWCfAjfY> z2m{AJ845$kP#Fm$$4D6qW5-yT2ouLdnF>?KRGA4g$4r?EbH`j+2n)wTSqe+XQdtQr M$4XfXYsXso1f9jZ^Z)<= diff --git a/SRC/A2NoSlotMidi/MIDIDRVR.OBJ.dsk b/SRC/A2NoSlotMidi/MIDIDRVR.OBJ.dsk index cfb189265b7e2c54e4feb8be6fe5b13cf504def7..ba5831571f4e49558ea6eed69540804d34bf10c8 100644 GIT binary patch delta 325 zcmZp8z|ru4V?!Uez*a_vZz|%93=EGMCV&{5=W!>O)XPs;Il;$ff{*e9AJ&OJPbc_% zo!}!nk-@?3dc9X>!UBek=M-!voH%xU>Gca=*2+w1y`Io3JE2c*0@tdQ z44DzV=O=VQStsGF!*JGKIBPqcwGqUs2Wwsp7hF1_OJUB0b#fEd%1%h&sL+Wxpm1jb z$z&u*mqx-XC`eez-gO)QeA8Il;$df{*kBpI;MvZcXrc zHGzSFK_~J+!qV%#A`=!cY&@r6GU3Fr>r1a+__9`HLhJQ}UeO7CViUMltz^iI=sh~2 z3(DFLXYGWuHp5wK;jHCw*1`#0^-#^TCv+)HnXpc5!dlS@2|5u66fRC6nT!PKN_YhY z2`kxKudn24J-2dV>v;u^2@t*@5+CT7m5dUL8hJV4f|JGiUQHHY;%(|**3Y;Q0G~3E AwEzGB diff --git a/SRC/A2NoSlotMidi/MIDIDRVR.OBJ.map b/SRC/A2NoSlotMidi/MIDIDRVR.OBJ.map index c4f5514..3bcde78 100644 --- a/SRC/A2NoSlotMidi/MIDIDRVR.OBJ.map +++ b/SRC/A2NoSlotMidi/MIDIDRVR.OBJ.map @@ -1,14 +1,14 @@ Modules list: ------------- main.o: - CODE Offs = 000000 Size = 0001A8 + CODE Offs = 000000 Size = 0001B5 Segment list: ------------- Name Start End Size -------------------------------------------- -CODE 009000 0091A7 0001A8 +CODE 009000 0091B4 0001B5 Exports list: diff --git a/SRC/A2NoSlotMidi/main.lst b/SRC/A2NoSlotMidi/main.lst index 1021832..3167ed6 100644 --- a/SRC/A2NoSlotMidi/main.lst +++ b/SRC/A2NoSlotMidi/main.lst @@ -16,6 +16,8 @@ Current file: main.s 000000r 1 ; THROUGH THE APPLE ANNUNCIATOR 0 OUTPUT PORT OF THE GAME CONNECTOR 000000r 1 ; USING 32 CYCLES PER BIT TO ACHIEVE A 31.25K MIDI BAUD RATE. 000000r 1 ; +000000r 1 ; //GS USERS NEED TO RUN THIS PROGRAM IN NORMAL SPEED MODE +000000r 1 ; 000000r 1 ; THE OUTPUT IS INITIALIZED TO A HIGH LOGIC VOLTAGE. WHEN IT GOES 000000r 1 ; LOW FOR 32 MICROSECONDS, THAT INDICATES THE START BIT OF A MIDI BYTE. 000000r 1 ; THEN 8 BYTES OF DATA ARE TRANSMITTED, FOLLOWED BY A HIGH STOP BIT. @@ -32,11 +34,13 @@ Current file: main.s 000000r 1 ; TRANSMITTED, AND A POINTER IN $CE,CF (LO,HI) WITH THE ADDRESS OF 000000r 1 ; THE DATA BYTES, THEN CALLS THE ENTRY POINT "SENDMSG" TO TRANSMIT 000000r 1 ; THE MESSAGE. -000000r 1 ; $900B = SEND A TEST MESSAGE - C MAJOR CHORD NOTE ONS -000000r 1 ; $900E = SEND A TEST MESSAGE - C MAJOR CHORD NOTE OFFS -000000r 1 ; $9011 = RESERVED -000000r 1 ; $9014 = RESERVED -000000r 1 ; $9017 = RESERVED +000000r 1 ; $900B = TURN ALL NOTES OFF +000000r 1 ; $900E = SEND A TEST MESSAGE - C MAJOR CHORD NOTE ONS +000000r 1 ; $9011 = SEND A TEST MESSAGE - C MAJOR CHORD NOTE OFFS +000000r 1 ; $9014 = CHANGE ANNUNCIATOR - MODIFIES CODE TO USE DIFFERENT ANNUNCIATOR +000000r 1 ; $9017 = ANNUNCIATOR TO USE: 0-3 - only looks at least significant 2 bits +000000r 1 ; $9018 = CHANGE LOGIC - BIT 7 +000000r 1 ; $901B = SET BIT 7 TO USE NEGATIVE LOGIC 000000r 1 ;------------------------------------------------------------------------- 000000r 1 ; Enhancements for 2018: 000000r 1 ; 1. Disable interrupts during critical timing sections, preserve interrupt status @@ -74,231 +78,242 @@ Current file: main.s 000011r 1 TEST2: 000011r 1 4C rr rr JMP TESTMSG2 ;SEND TEST MESSAGE 2 - C MAJOR CHORD OFF 000014r 1 ; -000014r 1 ;RSRVD1: -000014r 1 ;JMP INIT -000014r 1 ;RSRVD2: -000014r 1 ;JMP INIT -000014r 1 ;RSRVD3: -000014r 1 ;JMP INIT -000014r 1 ;--------------------------------------------------------------------------- -000014r 1 00 SAVENBYT: .byte $00 ;SAVE AREA FOR NUMBYTES -000015r 1 00 TEMPA: .byte $00 -000016r 1 00 TEMPX: .byte $00 -000017r 1 ;ANNPAIR: .byte $00 ; ANNUNCIATOR NUMBER TIMES 2 (1=C05A, 2=C05C, 3=C05E) -000017r 1 ;--------------------------------------------------------------------------- -000017r 1 INIT: -000017r 1 2C 59 C0 BIT AN0ON -00001Ar 1 60 RTS -00001Br 1 ;--------------------------------------------------------------------------- -00001Br 1 XMITMSG: -00001Br 1 A5 D7 LDA NUMBYTES ;SAVE NUMBER OF BYTES -00001Dr 1 8D rr rr STA SAVENBYT ;BECAUSE WE WILL CLOBBER IT -000020r 1 A0 00 LDY #$00 ;Y WILL BE AN INDEX INTO THE DATA AREA -000022r 1 XMITLOOP: -000022r 1 B1 CE LDA (DATAPTR),Y ;GET A DATA BYTE -000024r 1 20 rr rr JSR XMITONE -000027r 1 C8 INY ;POINT TO NEXT BYTE -000028r 1 C6 D7 DEC NUMBYTES ;DECREMENT COUNTER -00002Ar 1 A5 D7 LDA NUMBYTES ;CHECK IF ZERO -00002Cr 1 D0 F4 BNE XMITLOOP ;LOOP UNTIL DONE SENDING ALL BYTES -00002Er 1 AD rr rr LDA SAVENBYT -000031r 1 85 D7 STA NUMBYTES ;RESTORE ORIGINAL VALUE OF NUMBYTES -000033r 1 60 RTS -000034r 1 ;--------------------------------------------------------------------------- -000034r 1 XMITONE: -000034r 1 8D rr rr STA TEMPA ;SAVE A AND X REGISTERS -000037r 1 8E rr rr STX TEMPX -00003Ar 1 ; -00003Ar 1 0A ASL A ;SHIFT BIT INTO CARRY -00003Br 1 AA TAX ;SAVE CURRENT IMAGE OF DATA BYTE -00003Cr 1 A9 00 LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD -00003Er 1 69 58 ADC #TESTDAT1 -0000E4r 1 85 CF STA DATAPTR+1 -0000E6r 1 20 rr rr JSR SENDMSG -0000E9r 1 60 RTS -0000EAr 1 ;----------------------------------------------------------------------- -0000EAr 1 TESTMSG2: -0000EAr 1 A9 07 LDA #7 -0000ECr 1 85 D7 STA NUMBYTES -0000EEr 1 A9 rr LDA #TESTDAT2 -0000F4r 1 85 CF STA DATAPTR+1 -0000F6r 1 20 rr rr JSR SENDMSG -0000F9r 1 60 RTS -0000FAr 1 ;----------------------------------------------------------------------- -0000FAr 1 QUIET: -0000FAr 1 A9 90 LDA #$90 -0000FCr 1 85 D7 STA NUMBYTES -0000FEr 1 A9 rr LDA #QUIETMSG -000104r 1 85 CF STA DATAPTR+1 -000106r 1 20 rr rr JSR SENDMSG -000109r 1 60 RTS -00010Ar 1 ;----------------------------------------------------------------------- -00010Ar 1 TESTDAT1: -00010Ar 1 90 3C 40 40 .byte $90,$3C,$40,$40,$40,$43,$40 -00010Er 1 40 43 40 -000111r 1 TESTDAT2: -000111r 1 90 3C 00 40 .byte $90,$3C,$00,$40,$00,$43,$00 -000115r 1 00 43 00 -000118r 1 QUIETMSG: -000118r 1 B0 78 00 B0 .byte $B0,$78,$00,$B0,$79,$00,$B0,$7B,$00 -00011Cr 1 79 00 B0 7B -000120r 1 00 -000121r 1 B1 78 00 B1 .byte $B1,$78,$00,$B1,$79,$00,$B1,$7B,$00 -000125r 1 79 00 B1 7B -000129r 1 00 -00012Ar 1 B2 78 00 B2 .byte $B2,$78,$00,$B2,$79,$00,$B2,$7B,$00 -00012Er 1 79 00 B2 7B -000132r 1 00 -000133r 1 B3 78 00 B3 .byte $B3,$78,$00,$B3,$79,$00,$B3,$7B,$00 -000137r 1 79 00 B3 7B -00013Br 1 00 -00013Cr 1 B4 78 00 B4 .byte $B4,$78,$00,$B4,$79,$00,$B4,$7B,$00 -000140r 1 79 00 B4 7B -000144r 1 00 -000145r 1 B5 78 00 B5 .byte $B5,$78,$00,$B5,$79,$00,$B5,$7B,$00 -000149r 1 79 00 B5 7B -00014Dr 1 00 -00014Er 1 B6 78 00 B6 .byte $B6,$78,$00,$B6,$79,$00,$B6,$7B,$00 -000152r 1 79 00 B6 7B -000156r 1 00 -000157r 1 B7 78 00 B7 .byte $B7,$78,$00,$B7,$79,$00,$B7,$7B,$00 -00015Br 1 79 00 B7 7B -00015Fr 1 00 -000160r 1 B8 78 00 B8 .byte $B8,$78,$00,$B8,$79,$00,$B8,$7B,$00 -000164r 1 79 00 B8 7B -000168r 1 00 -000169r 1 B9 78 00 B9 .byte $B9,$78,$00,$B9,$79,$00,$B9,$7B,$00 -00016Dr 1 79 00 B9 7B -000171r 1 00 -000172r 1 BA 78 00 BA .byte $BA,$78,$00,$BA,$79,$00,$BA,$7B,$00 -000176r 1 79 00 BA 7B -00017Ar 1 00 -00017Br 1 BB 78 00 BB .byte $BB,$78,$00,$BB,$79,$00,$BB,$7B,$00 -00017Fr 1 79 00 BB 7B -000183r 1 00 -000184r 1 BC 78 00 BC .byte $BC,$78,$00,$BC,$79,$00,$BC,$7B,$00 -000188r 1 79 00 BC 7B -00018Cr 1 00 -00018Dr 1 BD 78 00 BD .byte $BD,$78,$00,$BD,$79,$00,$BD,$7B,$00 -000191r 1 79 00 BD 7B -000195r 1 00 -000196r 1 BE 78 00 BE .byte $BE,$78,$00,$BE,$79,$00,$BE,$7B,$00 -00019Ar 1 79 00 BE 7B -00019Er 1 00 -00019Fr 1 BF 78 00 BF .byte $BF,$78,$00,$BF,$79,$00,$BF,$7B,$00 -0001A3r 1 79 00 BF 7B -0001A7r 1 00 -0001A8r 1 ;---------------- -0001A8r 1 ; END OF PROGRAM -0001A8r 1 ;---------------- -0001A8r 1 .endproc -0001A8r 1 +000014r 1 CHNGANNC: +000014r 1 4C rr rr JMP CHGANNC ;RECONFIGURE PROGRAM TO USE ANNUNCIATOR NUMBER IN NEXT BYTE +000017r 1 ANNC2USE: +000017r 1 00 .byte $00 ;ONLY LEAST SIGNIFICANT 2 BITS ARE USED +000018r 1 CHNGLOGC: +000018r 1 4C rr rr JMP CHGLOGIC ;RECONFIGURE PROGRAM TO USE POSITIVE OR NEGATIVE LOGIC +00001Br 1 LOGICBYT: +00001Br 1 00 .byte $00 ;SET HIGH BIT TO 1 TO USE NEGATIVE LOGIC, ELSE POSITIVE LOGIC (DEFAULT) +00001Cr 1 ;--------------------------------------------------------------------------- +00001Cr 1 00 SAVENBYT: .byte $00 ;SAVE AREA FOR NUMBYTES +00001Dr 1 00 TEMPA: .byte $00 +00001Er 1 00 TEMPX: .byte $00 +00001Fr 1 ;ANNPAIR: .byte $00 ; ANNUNCIATOR NUMBER TIMES 2 (1=C05A, 2=C05C, 3=C05E) +00001Fr 1 ;--------------------------------------------------------------------------- +00001Fr 1 INIT: +00001Fr 1 2C 59 C0 BIT AN0ON +000022r 1 60 RTS +000023r 1 ;--------------------------------------------------------------------------- +000023r 1 XMITMSG: +000023r 1 A5 D7 LDA NUMBYTES ;SAVE NUMBER OF BYTES +000025r 1 8D rr rr STA SAVENBYT ;BECAUSE WE WILL CLOBBER IT +000028r 1 A0 00 LDY #$00 ;Y WILL BE AN INDEX INTO THE DATA AREA +00002Ar 1 XMITLOOP: +00002Ar 1 B1 CE LDA (DATAPTR),Y ;GET A DATA BYTE +00002Cr 1 20 rr rr JSR XMITONE +00002Fr 1 C8 INY ;POINT TO NEXT BYTE +000030r 1 C6 D7 DEC NUMBYTES ;DECREMENT COUNTER +000032r 1 A5 D7 LDA NUMBYTES ;CHECK IF ZERO +000034r 1 D0 F4 BNE XMITLOOP ;LOOP UNTIL DONE SENDING ALL BYTES +000036r 1 AD rr rr LDA SAVENBYT +000039r 1 85 D7 STA NUMBYTES ;RESTORE ORIGINAL VALUE OF NUMBYTES +00003Br 1 60 RTS +00003Cr 1 ;--------------------------------------------------------------------------- +00003Cr 1 XMITONE: +00003Cr 1 8D rr rr STA TEMPA ;SAVE A AND X REGISTERS +00003Fr 1 8E rr rr STX TEMPX +000042r 1 ; +000042r 1 0A ASL A ;SHIFT BIT INTO CARRY +000043r 1 AA TAX ;SAVE CURRENT IMAGE OF DATA BYTE +000044r 1 A9 00 LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD +000046r 1 69 58 ADC #TESTDAT1 +0000EFr 1 85 CF STA DATAPTR+1 +0000F1r 1 20 rr rr JSR SENDMSG +0000F4r 1 60 RTS +0000F5r 1 ;----------------------------------------------------------------------- +0000F5r 1 TESTMSG2: +0000F5r 1 A9 07 LDA #7 +0000F7r 1 85 D7 STA NUMBYTES +0000F9r 1 A9 rr LDA #TESTDAT2 +0000FFr 1 85 CF STA DATAPTR+1 +000101r 1 20 rr rr JSR SENDMSG +000104r 1 60 RTS +000105r 1 ;----------------------------------------------------------------------- +000105r 1 QUIET: +000105r 1 A9 90 LDA #$90 +000107r 1 85 D7 STA NUMBYTES +000109r 1 A9 rr LDA #QUIETMSG +00010Fr 1 85 CF STA DATAPTR+1 +000111r 1 20 rr rr JSR SENDMSG +000114r 1 60 RTS +000115r 1 ;----------------------------------------------------------------------- +000115r 1 CHGANNC: +000115r 1 60 RTS +000116r 1 ;----------------------------------------------------------------------- +000116r 1 CHGLOGIC: +000116r 1 60 RTS +000117r 1 ;----------------------------------------------------------------------- +000117r 1 TESTDAT1: +000117r 1 90 3C 40 40 .byte $90,$3C,$40,$40,$40,$43,$40 +00011Br 1 40 43 40 +00011Er 1 TESTDAT2: +00011Er 1 90 3C 00 40 .byte $90,$3C,$00,$40,$00,$43,$00 +000122r 1 00 43 00 +000125r 1 QUIETMSG: +000125r 1 B0 78 00 B0 .byte $B0,$78,$00,$B0,$79,$00,$B0,$7B,$00 +000129r 1 79 00 B0 7B +00012Dr 1 00 +00012Er 1 B1 78 00 B1 .byte $B1,$78,$00,$B1,$79,$00,$B1,$7B,$00 +000132r 1 79 00 B1 7B +000136r 1 00 +000137r 1 B2 78 00 B2 .byte $B2,$78,$00,$B2,$79,$00,$B2,$7B,$00 +00013Br 1 79 00 B2 7B +00013Fr 1 00 +000140r 1 B3 78 00 B3 .byte $B3,$78,$00,$B3,$79,$00,$B3,$7B,$00 +000144r 1 79 00 B3 7B +000148r 1 00 +000149r 1 B4 78 00 B4 .byte $B4,$78,$00,$B4,$79,$00,$B4,$7B,$00 +00014Dr 1 79 00 B4 7B +000151r 1 00 +000152r 1 B5 78 00 B5 .byte $B5,$78,$00,$B5,$79,$00,$B5,$7B,$00 +000156r 1 79 00 B5 7B +00015Ar 1 00 +00015Br 1 B6 78 00 B6 .byte $B6,$78,$00,$B6,$79,$00,$B6,$7B,$00 +00015Fr 1 79 00 B6 7B +000163r 1 00 +000164r 1 B7 78 00 B7 .byte $B7,$78,$00,$B7,$79,$00,$B7,$7B,$00 +000168r 1 79 00 B7 7B +00016Cr 1 00 +00016Dr 1 B8 78 00 B8 .byte $B8,$78,$00,$B8,$79,$00,$B8,$7B,$00 +000171r 1 79 00 B8 7B +000175r 1 00 +000176r 1 B9 78 00 B9 .byte $B9,$78,$00,$B9,$79,$00,$B9,$7B,$00 +00017Ar 1 79 00 B9 7B +00017Er 1 00 +00017Fr 1 BA 78 00 BA .byte $BA,$78,$00,$BA,$79,$00,$BA,$7B,$00 +000183r 1 79 00 BA 7B +000187r 1 00 +000188r 1 BB 78 00 BB .byte $BB,$78,$00,$BB,$79,$00,$BB,$7B,$00 +00018Cr 1 79 00 BB 7B +000190r 1 00 +000191r 1 BC 78 00 BC .byte $BC,$78,$00,$BC,$79,$00,$BC,$7B,$00 +000195r 1 79 00 BC 7B +000199r 1 00 +00019Ar 1 BD 78 00 BD .byte $BD,$78,$00,$BD,$79,$00,$BD,$7B,$00 +00019Er 1 79 00 BD 7B +0001A2r 1 00 +0001A3r 1 BE 78 00 BE .byte $BE,$78,$00,$BE,$79,$00,$BE,$7B,$00 +0001A7r 1 79 00 BE 7B +0001ABr 1 00 +0001ACr 1 BF 78 00 BF .byte $BF,$78,$00,$BF,$79,$00,$BF,$7B,$00 +0001B0r 1 79 00 BF 7B +0001B4r 1 00 +0001B5r 1 ;---------------- +0001B5r 1 ; END OF PROGRAM +0001B5r 1 ;---------------- +0001B5r 1 .endproc +0001B5r 1 diff --git a/SRC/A2NoSlotMidi/main.o b/SRC/A2NoSlotMidi/main.o index 49c2df32da5202bae14610cf663d6766883bb134..7070e33c33350df746f58fb6f6a7a4c8b4dc0216 100644 GIT binary patch literal 3927 zcmY+Hdu&r>7{{2Ugya0(&tQd_^GFb=s4~djg#$svf+Re^OwyCHUMFXN-)Hr9? z+fLWZyap8`sI6kS2!bFW5hY#*c$*SbZbrpRqJo;37~k)G-oq%#InVbz=lOo;-Dz_g z+Lq4mK3yplqvJF>y6JGyF^`T#XDD@$4o&MrqK8F~h#nlyb~c9g8bg0?7?)b@OJnJhF?1;kX}_4= z_2;p~SSH?d4mn514p!ZD^JsH%RTu9VhFIM;^8&hPjM6J^0TZ(JHg-c0_gq5rLo$!R z7^QdL&W-o)U>Sz2x)TnvH_q-jWc6KR1Y&M#jM9mD=tH{h=2@+KDdfAEi^eFOyN~`V z&c>59MrqdqzEoMrQof%>LE?+p#UR!L5-{&Ip-6*Oi1;QqXc5 zszl=%_?W1bH6F~ZHj^`A_M_{{K`R5$avrKg;|2Jbs8uu`%#AjaGh&v|bv*&CJP9p7 z1y!Q)r{QCw)-%R~xyEL4M$Bi?buEWho`aU3hbqzd3-B>fYlZP(R%|9`#C#E5*GtgK zN@#hNHeV~PMB^_bkBM5Z7!T%3o5>k5Uq#nlL5IF$%c;Un={H`}r+#tSDZTpjlU?E} zc1m}x*8Kf~9@F^YpRG&)^UmyES{O6)y zh<+(LEc%t`*U+y0(DFB$ezlaY7fpPt`PDcqTK-OtqhH0@=H)fcytvrYtMj1d_wbNt z`4IP7PWISS@30BUrw<&;!RZrDA2^hQ(y^#{!3Pa4g|i;7|^ZB^(Q!%{k%Zgp&h@a&U6O$$>*TI62|uzI0M2N0EcpL z281&J4&~qs2xkDCEqUSOg_8$|a&Yp($%8{VICEioz)hrw9(^;1q>Z1c!2Pioz*^v#lhYl5k4kP!3K>I3;i>2d5;Q5;)rjg)=Ce zL2xJsXHYnU;7|_Epl}8a$NX4aMF;)gg4dHySvQ`t_V8MBr%7@nla;Hp(;E&4{GQIv zx_i3g^BWe9zO{Sm6nDF)p|Po<$r)^$GovHwkJQifM!n%^Yn?YZDKu+Vt&w1j*-;yb zdRwEl4GZH-=hn0YTcULle{klkaJ`XG&|e>$(-Jjm{G3QLd!yb!AZSq6wYB)8wRDeY zqtl$}S|eMJZ9Puk>|nDu81&WqX0tkt@w7$!d?gTS_R*r5w8iJ-GY##Gc-#F!S`chb z*vsdb(@YZxg~By6TB28*(^PYsVosCIsmYu?=G16TlXwFy=n41(-VP6jqNjmjY2k75 mUqEBm_(C)Nb*&-utVYdHr`H?8@pkF z?C5}G7J4w=!p7M3cYq1mdZ)Of5T}89a=TNg%Es8w8>Ml$Nu&d^;VwAH@kQdgA)D^L zSRuThjj`#)=tCOsky$fw3gv3tVPoub_tITSb_rQF#`^D#TmP49+Gr^HRY4l9q@qpI#n=~bTTiKpK8mY<0Bn5uJ%_sNs8gmQ6oSEqHFA9Nbk^p84? zs{7OEG~;<1@pP4+bsAOom(gjYC!Tu0>NKj(Z+X**qiKHEY5uU|dGInzk-W{}3?t<}Uv38aty4yGbus zFHehEUG^IF*Rr;C>%MO6Gu^tc8~ey(UpMxVmwj7$uy1*f?(4xm%H?`1di3ekgMF0C zzLh<8B45|^*fQ3wy~^oTPA@o=gVU>=UT`P}r&l?>;B4ztPM>o6z@Z$RKIQa*LpeBo z%IO1Vd%tq}mD3Ln<>2%yrym^3!Rc2{KR7#b%E>7w2M*=n|B#LpeA@ z${7NOa&U%}GX&1=VdV@fXBZsH!5LQ0FgTQhGpw9paQ2KSXGA$8;7|_Eh;l~2p&XnM z<&1!{x5X#lpXDt+`Tm#|pFEi;2dBk{U)vU+e19khr^ScQbBj+t&mSk0lTc0q9Lm8- zC?^39<=`ZglK^L5t8!YE(+Upd;It~I6&%XJX;n@uIQx^zNh&7^4&~q^m6HUAa&VH$ zNrH1ArJR&Bgnl{y$Ur|;*xomPt zxUOnueKc5GJUb8#M4~lCf$*g2IdckG!Uepeur?Z~i58YEi#IPWs0>#|i)w@6*>fVr zEY;y)ajdE`%F4c~cCL8VKqwSu)V#XNV6>2~5iKv_Grd+Ww!*U&CAES1!7vR%c~vAJ z=U54YL)F!hf|-@k8~HSiPgD6cg-?_DRKcfmK24Ghw4j>_h642!;M0xay0oY$kzr_p jf?3tGgGDvfeA{DY*47sAqGUm^raBUs8!QOdg+k_kS`BLv diff --git a/SRC/A2NoSlotMidi/main.s b/SRC/A2NoSlotMidi/main.s index 71ef431..93003b4 100644 --- a/SRC/A2NoSlotMidi/main.s +++ b/SRC/A2NoSlotMidi/main.s @@ -12,6 +12,8 @@ ; THROUGH THE APPLE ANNUNCIATOR 0 OUTPUT PORT OF THE GAME CONNECTOR ; USING 32 CYCLES PER BIT TO ACHIEVE A 31.25K MIDI BAUD RATE. ; +; //GS USERS NEED TO RUN THIS PROGRAM IN NORMAL SPEED MODE +; ; THE OUTPUT IS INITIALIZED TO A HIGH LOGIC VOLTAGE. WHEN IT GOES ; LOW FOR 32 MICROSECONDS, THAT INDICATES THE START BIT OF A MIDI BYTE. ; THEN 8 BYTES OF DATA ARE TRANSMITTED, FOLLOWED BY A HIGH STOP BIT. @@ -28,11 +30,13 @@ ; TRANSMITTED, AND A POINTER IN $CE,CF (LO,HI) WITH THE ADDRESS OF ; THE DATA BYTES, THEN CALLS THE ENTRY POINT "SENDMSG" TO TRANSMIT ; THE MESSAGE. -; $900B = SEND A TEST MESSAGE - C MAJOR CHORD NOTE ONS -; $900E = SEND A TEST MESSAGE - C MAJOR CHORD NOTE OFFS -; $9011 = RESERVED -; $9014 = RESERVED -; $9017 = RESERVED +; $900B = TURN ALL NOTES OFF +; $900E = SEND A TEST MESSAGE - C MAJOR CHORD NOTE ONS +; $9011 = SEND A TEST MESSAGE - C MAJOR CHORD NOTE OFFS +; $9014 = CHANGE ANNUNCIATOR - MODIFIES CODE TO USE DIFFERENT ANNUNCIATOR +; $9017 = ANNUNCIATOR TO USE: 0-3 - only looks at least significant 2 bits +; $9018 = CHANGE LOGIC - BIT 7 +; $901B = SET BIT 7 TO USE NEGATIVE LOGIC ;------------------------------------------------------------------------- ; Enhancements for 2018: ; 1. Disable interrupts during critical timing sections, preserve interrupt status @@ -70,12 +74,14 @@ TEST1: TEST2: JMP TESTMSG2 ;SEND TEST MESSAGE 2 - C MAJOR CHORD OFF ; - ;RSRVD1: - ;JMP INIT - ;RSRVD2: - ;JMP INIT - ;RSRVD3: - ;JMP INIT +CHNGANNC: + JMP CHGANNC ;RECONFIGURE PROGRAM TO USE ANNUNCIATOR NUMBER IN NEXT BYTE +ANNC2USE: + .byte $00 ;ONLY LEAST SIGNIFICANT 2 BITS ARE USED +CHNGLOGC: + JMP CHGLOGIC ;RECONFIGURE PROGRAM TO USE POSITIVE OR NEGATIVE LOGIC +LOGICBYT: + .byte $00 ;SET HIGH BIT TO 1 TO USE NEGATIVE LOGIC, ELSE POSITIVE LOGIC (DEFAULT) ;--------------------------------------------------------------------------- SAVENBYT: .byte $00 ;SAVE AREA FOR NUMBYTES TEMPA: .byte $00 @@ -167,6 +173,8 @@ XMITONE: RTS ;----------------------------------------------------------------------- XMITBITS: + PHP ;SAVE CURRENT INTERRUPT STATUS + SEI ;MASK INTERRUPTS DURING CRITICAL TIMING SECTION BIT AN0OFF ;4 CYCLES - TRANSMIT START BIT - ALWAYS LOW JSR DELAY22 ;6+22 BIT0: @@ -195,6 +203,7 @@ BIT7: JSR DELAY22 ;6+22 BIT AN0ON ;4 ;TRANSMIT STOP BIT - ALWAYS HIGH JSR DELAY22 ;6+22 + PLP ;RESTORE SAVED INTERRUPT STATUS RTS ;----------------------------------------------------------------------- DELAY22: @@ -238,6 +247,12 @@ QUIET: JSR SENDMSG RTS ;----------------------------------------------------------------------- +CHGANNC: + RTS +;----------------------------------------------------------------------- +CHGLOGIC: + RTS +;----------------------------------------------------------------------- TESTDAT1: .byte $90,$3C,$40,$40,$40,$43,$40 TESTDAT2: diff --git a/SRC/A2NoSlotMidi/make/V2Make.scpt b/SRC/A2NoSlotMidi/make/V2Make.scpt index dd0f68f71d54c82a006e5e42aa2208d48305915d..ce3929eddd147b068f520d44beb1ede73222f6af 100644 GIT binary patch delta 256 zcmeyQwoHA46OW{Uk+Yktk+G4kp_`Ghu8D=Av95)wqoc0zFc>j7Gq^Fh0%>C))@3jR@<41|1``GgAP>Z{U@&EH1VUXP&j2Xz3{-Cl zBn^P1F@rgS#pIK`DMVSiIgoETGvl7gKLw}qdNQ~$crxfS1TzFNI8TljlA1hONRzR8 j@?N1Zc25^i{oo+y$(+KmybOuO$wdr|47|VY-CGL)nD;nV delta 229 zcmZ3c{z+|v6OW{mi{-Sp_#7bUL<(Kra)-IV9ekO z)MEjp&4Ac#@=4wlqAcAU$hVxCan|IYf>S4N5Yl7JntWd