; TSAVE LJUD2.TXT ;--------------------------------- ;86-02-11 ;DAVID ANDERSSON <5201> ; ;ASSEMBLER RUTINER F\R ATT SPELA IN ;OCH ]TERGE LJUD. ;--------------------------------- ; ; PRGADR: EQU 61440 ;PROGRAMMET PLACERAS UNDER STACKEN - ;DET M]STE VARA P] EN J[MN PAGE-ADRESS HI: EQU .HIGH.PRGADR ;H\GA BYTEN AV ADRESSEN ; SADDR: EQU 51200 ;STARTADRESS F\R LJUD-DATA (16K RAM) EADDR: EQU PRGADR-1 ;SISTA ADRESS F\R LJUD-DATA ; ; ;-------------------------------- ; PROGRAMMET B\RJAR H[R ; ORG PRGADR ; JP START ;CALL(PRGADR) SPELA IN LJUD JP PLAY ;CALL(PRGADR+3) SPELA UP LJUD ; ; ; VARIABLER ; BYTE: DEFB 0 ;SHIFTA IN/UT EN BYTE COUNT: DEFB 8 ;R[KNAR 8 BITAR I EN BYTE ADDR: DEFW 0 ;ADRESS TILL LJUD-DATA ; ; ; INTERUPT VEKTORER ; ORG PRGADR+52 ;NORMAL I-VEKTOR I PIO:N ; SINT: DEFW SINT1 ;STROBE INTERUPT (S[TTS VID INITIERING) DEFW 1428 ;CASSETT INTERUPT ; ; ;--------------------------------- ; RUTINER SOM ANROPAS FR]N BASIC ; ; SPELA IN LJUD ; ANROPAS FR]N BASIC, AVBRYTS MED ; ]TERSTARTAR INSPELNING ; START: LD A,8 LD (COUNT),A ;INITIERA VARIABEL LD HL,EADDR LD (ADDR),HL ;S[TT SLUTADRESS F\R INSPELNING - ;INSPELNING SKER D] INTE F\RENS - ; TRYCKS NER LD HL,SINT1 ;INTERUPT F\R INSPELNING LD (SINT),HL ;S[TT INTERUPTRUTIN 1 CALL INITI ;INITIERA PIO-INTERUPT ; RECORD: IN A,(56) ;TESTA TANGENTBORDET CP 13+128 ; JR Z,EXITI ;TERMINERA INTERUPT OM RETURN CP 32+128 ; JR NZ,RECORD ;SPELA IN LJUD OM EJ SPACE, LOOPA LD HL,SADDR ;SPACE [R INTRYCKT - LD (ADDR),HL ;S[TT STARTADRESS F\R DATA JR RECORD ;LOOPA ; ; ; SPELA UPP LJUD ; ANROPAS FR]N BASIC, AVBRYTS MED ; PLAY: LD A,1 LD (COUNT),A ;INITIERA VARIABEL LD HL,SADDR LD (ADDR),HL ;S[TT STARTADRESS F\R DATA LD HL,SINT2 ;INTERUPT F\R ]TEGIVNING LD (SINT),HL ;S[TT INTERUPTRUTIN 2 CALL INITI ;INITIERA PIO-INTERUPT ; PLAY1: LD HL,(ADDR) ;TESTA OM EFTER SLUTADRESS LD A,H CP HI JP NC,EXITI ;OM S], TERMINERA INTERUPT IN A,(56) ;TESTA TANGENTBORDET CP 13+128 ; JR NZ,PLAY1 ;LOOPA OM INTE RETURN ; JP EXITI ;TERMINERA INTERUPT ; ; ;--------------------------------- ; INITIERINGS RUTINER ; ; INITIERA STROB INTERUPT ; INITI: LD A,I ;TESTA OM I-REGISTRET REDAN [R SPARAD CP HI JR Z,INITI3 LD (SAVEI),A ;OM INTE, SPARA SIST I LISTAN INITI3: LD HL,ILIST ;PIO DATA F\R STROBE INTERUPT JR SETPIO ; ; ; TERMINERA STROB INTERUPT ; EXITI: LD HL,ULIST ;PIO DATA F\R NORMAL INTERUPT ;JR SETPIO ; ; ; PROGRAMERA PIO OCH ENABLE INTERUPT ; HL SKA PEKA P] LISTA ,5 BYTES L]NG ; SETPIO: PUSH BC LD BC,4*256+57 ;B=4 BYTES, C=PORT 57 DI OTIR LD A,(HL) ;A=SISTA BYTEN I LISTAN - LD I,A ;TILL I-REGISTRET EI POP BC RET ; ; ; DATA F\R PROGRAMERING AV PIO PORT A (KEYBOARD) ; ILIST: DEFB 04FH ;MODE 1 (ALL INPUTS) DEFB 087H ;ENABLE INTERUPT DEFB 087H ; -"- DEFB 087H ; -"- DEFB HI ;HIGH VEKTOR ; ULIST: DEFB 0CFH ;MODE 3 (CONTROL) DEFB 0FFH ;DIRECTION ALL INPUT DEFB 0B7H ;ENABLE,OR_BITS,GO_HIGH,MASK_FOLLOWS DEFB 07FH ;BIT 7 IS MASKED SAVEI: DEFB 0 ;OLD HIGH VEKTOR (S[TTS VID INITIERING) ; ; ;--------------------------------- ; INTERUPT RUTINER ; ; STROB INTERUPT, 7812 PERIODER/S ; INTERUPT RUTIN F\R INSPELNING AV LJUD ; SINT1: PUSH AF PUSH HL IN A,(58) ;K[NN AV V24-PORTEN AND 1 ;TESTA OM LJUDSIGNALEN, CLEAR CARRY JR NZ,NOOUT ;HOPPA OM 1 (AKTIV L]G) XOR A ;GE PULS I H\GTALAREN OUT (6),A LD A,121 OUT (6),A SCF ;S[TT CARRY ;CARRY [R SAMPLAD BIT NOOUT: LD HL,BYTE RL (HL) ;CARRY TILL BIT 0 AV (BYTE) LD A,(HL) ;A=BYTE INC HL ;HL=ADRESS TILL COUNT DEC (HL) ;R[KNA NER COUNT JR NZ,NONEX2 ;HOPPA OM COUNT>0 LD (HL),8 ;COUNT=8, F\R N[STA BYTE LD HL,(ADDR) ;ADRESS TILL LJUD-DATA LD (HL),A ;SPARA BYTE I LJUD-DATA JP NXTADR ;S[TT NY ADRESS, RETURN FROM INTERUPT ; ; ; INTERUPT RUTIN F\R ]TERGIVNING AV LJUD ; SINT2: PUSH AF PUSH HL LD HL,BYTE RL (HL) ;BIT 7 AV (BYTE) TILL CARRY JR NC,NOOUT2 ;HOPPA OM BIT=0 XOR A ;BIT=1, GE PULS I H\GTALAREN OUT (6),A LD A,121 OUT (6),A NOOUT2: INC HL ;HL=ADRESS TILL COUNT DEC (HL) ;R[KNA NER COUNT JR NZ,NONEX2 ;HOPPA OM COUNT>0 LD (HL),8 ;COUNT=8 F\R N[STA BYTE LD HL,(ADDR) ;ADRESS TILL LJUD-DATA LD A,(HL) ;A=LJUD-DATA BYTE LD (BYTE),A ;SPARA BYTE F\R ATT SHIFTA UT ; NXTADR: INC HL ;N[STA BYTE LD A,H ;TESTA OM EFTER SISTA ADRESS CP HI JR NC,NONEX2 ;JA, SPARA INTE NY ADRESS LD (ADDR),HL ;SPARA N[STA ADRESS NONEX2: POP HL ;RETURN FROM INTERUPT POP AF EI RETI ; ;--------------------------------- END