S_ADDIZ SMB 'S_ADDIZ' INSTALL SMB 'INSTALL' U_GONOFF SMB 'U_GONOFF' I_GETTD SMB 'I_GETTD' COMTAB SMB 'COMTAB' * Atari OS RTCLOK EQU $0012 FMSZPG EQU $0043 LOMEM EQU $0080 VVBLKD EQU $0224 SDLSTL EQU $0230 SDLSTH EQU $0231 INVFLG EQU $02B6 SHFLOK EQU $02BE PORTB EQU $D301 SETVBLV EQU $E45C XITVBV EQU $E462 * Adresy SDX S_VER EQU $0701 JEXTSW EQU $07F7 BLK RELOC MAIN LDA S_VER ;Ustalenie wersji SDX AND #$0F ORA #$30 STA DSDXVER+2 ;revision LDA S_VER LSR @ LSR @ LSR @ LSR @ ORA #$30 STA DSDXVER ;ver no. ; LDA PORTB ; PHA ; AND #$FE ; STA PORTB ;wylaczenie OSa ; LDY #$05 ;L05A1 LDA L05CC,Y ;przepisanie 2 skokow ; STA $FFC6,Y ; DEY ; BPL L05A1 ; PLA ; STA PORTB LDA VTDMAIN LDX VTDMAIN+1 JSR S_ADDIZ ;dodanie po resecie LDX #$0A STX COUNTVBL LDA #$00 STA CLKFAIL STA ST_ONOFF DEC INSTALL JMP PROCPARM VTDMAIN DTA V(TDMAIN) ;L05CC JMP L05E4 ; JMP L0649 ************************ BLK RELOC EXTENDED ; $5D2 TDMAIN LDA #$00 ;przy resecie STA CLKFAIL LDY ST_ONOFF JMP CHKONOFF PROCPARM JSR U_GONOFF ;C=ON/OFF, U_FAIL LDA #$00 ROL @ ;zlapanie C TAY STY ST_ONOFF CHKONOFF CPY #$00 BEQ TURNOFF * Wlacz TD LDY PTDVBPRO LDX PTDVBPRO+1 JSR CHGVBLK CLC RTS * Wylacz TD TURNOFF LDY XITVBV JSR CHGVBLK LDA SDLSTL ;Przywroc jesli CMP PNEWDL ;te same adresy BNE XTURNOFF ;DL LDA SDLSTH CMP PNEWDL+1 BNE XTURNOFF SEC ;Przywrocenie LDA ADROLDDL ;starej DL SBC #$03 STA SDLSTL STA FMSZPG LDA ADROLDDL+1 SBC #$00 STA SDLSTH STA FMSZPG+1 LDY #$06 NEXTDLB LDA (FMSZPG),Y INY ;Szukamy CMP #$41 ;JMP+VBLK BNE NEXTDLB LDA SDLSTL ;Przepisujemy STA (FMSZPG),Y ;z niego INY ;adres LDA SDLSTH ;poczatku DL STA (FMSZPG),Y XTURNOFF CLC RTS * Zmiana wektora VB CHGVBLK LDA #07 ;VVBLKD JMP SETVBLV ; LDA RTCLOK+2 ;WAITCLK CMP RTCLOK+2 ; BEQ WAITCLK ; STY VVBLKD ; STX VVBLKD+1 ; RTS PTDVBPRO DTA V(TDVBPROC) PNEWDL DTA V(NEWDL) ************************ PREPINFO BIT CLKFAIL BPL L0650 SEC RTS L0650 DEC CLKFAIL STX PUTCHAR+2 ;Zapamietanie adresu STY PUTCHAR+1 ;info JSR I_GETTD BCC TIMEDATE INC CLKFAIL ;Gdy nie da sie odczytac zegara RTS * Przygotowanie daty i czasu TIMEDATE LDA COMTAB+$0F ;rok SEC SBC #84 BCS SKIPY2K ;Y2K ADC #$64 ;Y2K SKIPY2K STA YEARIDX+1 PHA ;Y2K AND #$03 ;Y2K TAY ;Y2K PLA ;Y2K LSR @ LSR @ SEC ;Y2K CLC YEARIDX ADC #$00 ADC COMTAB+$0D ;dzien LDX COMTAB+$0E ;mies ADC MONTHOFS-1,X CPY #$00 ;Y2K BNE SKIPY2K1 ;Y2K CPX #$03 ;Y2K SKIPY2K1 SBC #$07 ;Y2K BCS SKIPY2K1 ;Y2K ADC #$08 ;Y2K ;Y2K TAY ;Y2K LDA COMTAB+$0F ;Y2K AND #$03 ;Y2K BNE L0685 ;Y2K CPX #$03 ;Y2K BCC L0686 ;Y2K L0685 INY ;Y2K L0686 TYA ;Y2K L0687 CMP #$07 ;Y2K BCC L068F ;Y2K SBC #$07 ;Y2K BCS L0687 ;Y2K L068F ADC #$02 ;i mamy w A numer dnia tygodnia PHA LDY #$00 ;Zaczynamy drukowanie od poz.0 JSR PRNSEP LDA SHFLOK BEQ SMALL LDA #'A' DTA B($2C) SMALL LDA #'a' LDX INVFLG BEQ NORMAL ORA #$80 ;zrob inverse NORMAL JSR PUTCHAR JSR PRNSEP PLA ;W A nr dnia tygodnia TAX LDA DAY1-1,X JSR PUTCHAR LDA DAY2-1,X JSR PUTCHAR LDA DAY3-1,X JSR PUTCHAR JSR PRNSPACE LDA COMTAB+$D ;dzien JSR L075C JSR PRNMINUS LDX COMTAB+$E ;mies LDA MONTH1-1,X JSR PUTCHAR LDA MONTH2-1,X JSR PUTCHAR LDA MONTH3-1,X JSR PUTCHAR JSR PRNMINUS LDA COMTAB+$F ;rok JSR L0759 JSR PRNSEP LDA COMTAB+$10 ;hh JSR L075C JSR PRNCOLON LDA COMTAB+$11 ;mm JSR L0759 JSR PRNCOLON LDA COMTAB+$12 ;ss JSR L0759 CLC INC CLKFAIL RTS MONTHOFS DTA B($00,$03,$03,$06,$01,$04) DTA B($06,$02,$05,$00,$03,$05) * Polskie ;DAY1 DTA C'SNPWSCP' ;DAY2 DTA C'oiotrzi' ;DAY3 DTA C'benoowa' ;MONTH1 DTA C'SLMKMCLSWPLG' ;MONTH2 DTA C'tuawaziirair' ;MONTH3 DTA C'ytrijepezzsu' * Angielskie DAY1 DTA C'SSMTWTF' DAY2 DTA C'auouehr' DAY3 DTA C'ynnedui' MONTH1 DTA C'JFMAMJJASOND' MONTH2 DTA C'aeapauuuecoe' MONTH3 DTA C'nbrrynlgptvc' L0759 LDX #$FF DTA B($2C) ; Bit L075C LDX #$00 L075E STX STORAGE+$29 LDX #$FF SEC L0764 INX SBC #$0A BCS L0764 ADC #$0A PHA TXA BNE L0776 BIT STORAGE+$29 BMI L0776 ORA #$10 L0776 JSR L077C PLA AND #$0F L077C EOR #$30 PUTCHAR STA $FFFF,Y INY RTS PRNSEP LDA #'|' DTA B($2C) PRNSPACE LDA #' ' DTA B($2C) PRNCOLON LDA #':' DTA B($2C) PRNMINUS LDA #'-' L078B CLC BCC PUTCHAR NEWDL DTA B($70,$70) DTA B($30,$42) DTA V(STORAGE) DTA B($01) ADROLDDL DTA V($0000) TDLINE DTA C'SpartaDOS X ' DSDXVER DTA C'4.2' TDLINFO DTA B($00,$00,$00,$00) DTA B($00,$00,$00,$00) DTA B($00,$00,$00,$00) DTA B($00,$00,$00,$00) DTA B($00,$00,$00,$00) DTA B($00,$00,$00,$00) DTA B($00,$00) PTDLINFO DTA V(TDLINFO) * Co 30 VBLK DOTDLINE LDA PORTB PHA LDA COMTAB-$16 ;Indeks banku pamieci EXT JSR JEXTSW ;Przelaczenie na niego LDX PTDLINFO+1 LDY PTDLINFO JSR PREPINFO LDX #$00 LDA #$0F LDY #$00 JSR MOV2STOR LDA #$19 LDY #$0F JSR MOV2STOR ; LDA #$80 ; STA STORAGE+$27 PLA STA PORTB ;Przywrocenie ustawienia pamieci RTS CHKINV CMP #$80 BCC L07FD ;mala! TMPCHAR DTA B(0) * Przepisanie bajtow do STORAGE + zmiana kodow MOV2STOR PHA LDA TDLINE,Y STA TMPCHAR AND #$7F CMP #$60 BCS L07FD ;mala litera? L07F7 SBC #$1F BCS L07FD ADC #$60 L07FD BIT TMPCHAR BMI CHSCREEN ORA #$80 ;ustaw inv. CHSCREEN STA STORAGE,X INY INX PLA SEC SBC #$01 BNE MOV2STOR RTS TDVBPROC CLD DEC COUNTVBL BNE XTDVBPRO ;Czy licznik sie wyzerowal LDA #25 ;30 ;Licznik od nowa STA COUNTVBL JSR DOTDLINE LDA SDLSTL ;Czy zmieniono DL ? CMP PNEWDL BNE DLCHANGE LDA SDLSTH CMP PNEWDL+1 BEQ XTDVBPRO DLCHANGE LDA LOMEM ;To gdy zmieniono DL PHA ;Zapamietanie LOMEM LDA LOMEM+1 ;(bedzie uzywane jako TMP) PHA LDA SDLSTL ;Przygotowanie DL STA LOMEM CLC ADC #$03 STA ADROLDDL ;Zmiana adresu skoku LDA SDLSTH ;na nowa DL STA LOMEM+1 ADC #$00 STA ADROLDDL+1 LDY #$06 NEWDLBYT LDA (LOMEM),Y INY ;Szukamy CMP #$41 ;JMP+VBLK w Y BNE NEWDLBYT LDA PNEWDL ;i przepisujemy adres naszej DL STA SDLSTL ;do rejestru STA (LOMEM),Y ;i do skoku INY LDA PNEWDL+1 STA SDLSTH STA (LOMEM),Y PLA ;Przywracamy poprzednie MEMLO STA LOMEM+1 PLA STA LOMEM XTDVBPRO JMP XITVBV ************************ BLK EMPTY $2C MAIN ; Num:2 Mem:$80 STORAGE EQU *-$2C CLKFAIL EQU STORAGE+$28 ; licznik blednych odczytow zegara COUNTVBL EQU STORAGE+$2A ; licznik przerwan VBLK ST_ONOFF EQU STORAGE+$2B ; stan ON/OFF BLK UPDATE ADDRESS BLK UPDATE SYMBOLS BLK UPDATE NEW PROCPARM '@TD2' BLK UPDATE NEW PREPINFO 'I_FMTTD' END