;+ ; Copyright (c) 2010-2011 Oleg Safiullin ; ; Permission to use, copy, modify, and distribute this software for any ; purpose with or without fee is hereby granted, provided that the above ; copyright notice and this permission notice appear in all copies. ; ; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ;- .MCALL .MODULE .MODULE MZ,VERSION=01,COMMENT=,AUDIT=YES .MCALL .DRDEF ;яхярелмше люйпняш .DRDEF MZ,374,FILST$,1600.,176674,474 ;оюпюлерпш дпюибепю .DRPTR FETCH=MZLOAD,LOAD=MZLOAD ;рнвйх бундю FETCH/LOAD .DRSET RETRY,8.,O.RETR,NUM ;мюярпнийю онбрнпнб опх ньхайе O.RETR: CMP R0,R3 ;мнплюкэмне вхякн? BHI O.BAD ;HI -> мер MOV R0,DRETRY ;лемъел йнкхвеярбн онбрнпнб O.GOOD: TST (PC)+ ;йс O.BAD: SEC ;йч! RETURN ;бнгбпюр б KMON .DRBEG MZ ;рнвйю бундю MOV (PC)+,(PC)+ ;сярюмюбкхбюел йнк-бн онбрнпнб DRETRY: .WORD 8. ; йнкхвеярбн онбрнпнб RETRY: .WORD 0 ; явервхй онбрнпнб MOV MZCQE,R4 ;онксвюел щкелемр нвепедх MOV (R4)+,R1 ;R1 -> мнлеп акнйю TSTB (R4)+ ;опносяйюел йнд SPFUN MOVB (R4)+,R3 ;R3 -> мнлеп дхяйнбндю MOV MZPCKT,R5 ;R5 -> акнй оюпюлерпнб MZ MOV #4000,(R5)+ ;опедонкюцюел времхе MOV (R4)+,4(R5) ;сярюмюбкхбюел юдпея астепю MOV (R4)+,6(R5) ;сярюмюбкхбюел йнкхвеярбн якнб BPL 10$ ;PL -> времхе ASL -2(R5) ;гюохяэ -> лемъел йнд ноепюжхх NEG 6(R5) ;бшопюбкъел йнкхвеярбн якнб 10$: CLR R0 ;R0 -> мнлеп днпнфйх, DIV #10.,R0 ;R1 -> мнлеп яейрнпю INC R1 ;... ASL R3 ;R3 -> ярнпнмю, мнлеп дхяйю ASR R0 ;... RORB R3 ;... INC R5 ;янупюмъел б акнй оюпюлерпнб MOVB R3,(R5)+ ;...ярнпнмс, мнлеп дхяйю MOVB R0,(R5)+ ;...мнлеп днпнфйх MOVB R1,(R5)+ ;...мнлеп яейрнпю MZDOIO: MOV (PC)+,R0 ;R0 -> оюйер дкъ оепедювх MZPADR: .WORD 0 ; юдпея оюйерю MOV #4,R1 ;R1 -> дкхмю оюйерю б аюирюу MOV #MZ$CSR,R4 ;R4 -> CSR 10$: TSTB @R4 ;фдел цнрнбмнярх йнмрпнккепю BPL 10$ ;... MOVB (R0)+,2(R4) ;оепедюел нвепедмни аюир SOB R1,10$ ;жхйкхляъ дн йнмжю оюйерю BIS #100,@R4 ;пюгпеьюел опепшбюмхъ ; б щрнл леяре днкфем ашрэ RETURN дкъ бнгбпюрю б лнмхрнп. лш ецн ме охьел ; оняйнкэйс .DRAST аег оюпюлерпю ABT ондярюбкъер RETURN оепбни йнлюмдни. .DRAST MZ,4 ;напюанрвхй опепшбюмхи CLR @#MZ$CSR ;гюопеыюел опепшбюмхъ нр MZ TSTB MZPBLK ;опнбепъел ярюрся гюбепьемхъ BEQ MZDONE ;EQ -> OK .FORK MZFBLK ;ньхайю. оепеунд мю FORK LEVEL DEC RETRY ;онбрнпъел ноепюжхч BGT MZDOIO ;...еякх мсфмн MZERR: MOV MZCQE,R4 ;ме онлнцкн... BIS #HDERR$,@-(R4) ;...сярюмюбкхбюел ахр ньхайх MZDONE: .DRFIN MZ ;гюбепьюел ноепюжхч MZFBLK: .BLKW 4 ;акнй FORK ;+ ; оюйер дюммшу MZ: ; ; 1 аюир - лкюдьхи аюир акнйю оюпюлерпнб I/O ; 2 аюир - ярюпьхи аюир акнйю оюпюлерпнб I/O ; 3 аюир - 377 ; 4 аюир - 377 ;- MZPCKT: .WORD 0,-1 ;оюйер дюммшу MZ ;+ ; акнй оюпюлерпнб I/O: ; ; 1 якнбн лкюдьхи аюир - ярюрся гюбепьемхъ (0 -> сяоеьмне) ; ярюпьхи аюир - йнд йнлюмдш (10 - времхе, 20 - гюохяэ) ; ; 2 якнбн лкюдьхи аюир - йнкхвеярбн онбепумняреи (2) ; ярюпьхи аюир - 0:1 - мнлеп дхяйю, 7 - мнлеп онбепумнярх ; ; 3 якнбн лкюдьхи аюир - мнлеп днпнфйх (0-79.) ; ярюпьхи аюир - мнлеп яейрнпю (1-10.) ; ; 4 якнбн юдпея астепю ; ; 5 якнбн йнкхвеярбн якнб ;- MZPBLK: .WORD 4000,2,0,0,0 ;акнй оюпюлерпнб I/O .DRBOT MZ,BOOT1,READ1 ;юооюпюрмши гюцпсгвхй . = MZBOOT+40 ; BOOT1: JMP @#BOOT-MZBOOT ;оепеунд й гюцпсгвхйс дпюибепю . = MZBOOT+210 READ1: CLR @#44 ;ондопнцпюллю времхъ дкъ DUP... MOVB @#B$DEVU,BTPBLK+3 ;...хгбкейюел мнлеп сярпниярбю MOV #READ-MZBOOT,@#B$READ ;...сярюмюбкхбюел оо времхъ ;+ ; ондопнцпюллю времхъ. ; ; мю бунде: ; R0 - мнлеп акнйю ; R1 - йнкхвеярбн якнб ; R2 - юдпея астепю ; READ: MOV R2,BTPBLK+6 ;сярюмюбкхбюел юдпея астепю MOV R1,BTPBLK+10 ;...йнкхвеярбн якнб MOV R0,R1 ; CLR R0 ; DIV #10.,R0 ; INC R1 ; ASL BTPBLK+2 ; ASR R0 ; ROR BTPBLK+2 ;...онбепумнярэ, мнлеп дхяйю MOVB R0,BTPBLK+4 ;...мнлеп днпнфйх MOVB R1,BTPBLK+5 ;...мнлеп яейрнпю MOV #8.,R0 ;R0 -> йнкхвеярбн онбрнпнб MOV #MZ$CSR,R4 ;R4 -> CSR 10$: MOV #BTPCKT-MZBOOT,R1 ;R1 -> оюйер дюммшу MZ MOV #5,R3 ;явервхй аюир (+1) BR 30$ ; 20$: MOVB (R1)+,2(R4) ;оепедюел нвепедмни аюир 30$: TSTB @R4 ;фдел цнрнбмнярх BPL 30$ ; SOB R3,20$ ;жхйкхляъ дн йнмжю оюйерю TSTB BTPBLK ;опнбепъер ярюрся гюбепьемхъ BEQ 40$ ;EQ -> йс! CLRB BTPBLK ;йч! яапюяшбюер ярюрся SOB R0,10$ ;онбрнпъел... BR BIOERR ;...ме онлнцкн - ньхайю I/O 40$: RETURN ;бнгбпюр BOOT: MOV #10000,SP ;сярюмюбкхбюел ярей MOV R0,R5 ;янупюмъел мнлеп дхяйю MOVB R0,BTPBLK+3 ;...сярюмюбкхбюел б акнйе I/O MOV #B$BOOT,R2 ;R2 -> юдпея астепю MOV #2,R0 ;R0 -> мнлеп акнйю (2) MOV #256.*4,R1 ;R1 -> йнкхвеярбн якнб CALL READ ;вхрюел акнйх 2-5 дхяйю MOV R5,@#B$DEVU ;сярюмюбкхбюел мнлеп сярпниярбю MOV #READ-MZBOOT,@#B$READ ;...юдпея оо времхъ MOV #B$DNAM,@#B$DEVN ;...хлъ дпюибепю сярпниярбю JMP @R2 ;гюосяйюел гюцпсгвхй лнмхрнпю BTPCKT: .WORD BTPBLK-MZBOOT,-1 ;оюйер дюммшу MZ BTPBLK: .WORD 4000,2,0,0,0 ;акнй оюпюлерпнб I/O .DREND MZ ;йнмеж йндю дпюибепю ;+ ; рнвйю бундю FETCH/LOAD ; ; мю бунде онксвюер бяъйсч аъйс нр лнмхрнпю. мюя хмрепеясер R5, ; яндепфюыхи юдпея рюакхжш $ENTRY дкъ дпюибепю. ;- MZLOAD: MOV @R5,R5 ;R5 -> аюгнбши юдпея дпюибепю MOV R5,R0 ; ADD #MZPBLK-MZLQE,R0 ;R0 -> юдпея MZPBLK MOV R0,-4(R0) ;сярюмюбкхбюел ецн б MZPCKT CMP -(R0),-(R0) ;R0 -> юдпея MZPCKT MOV R0,MZPADR-MZLQE(R5) ;сярюмюбкхбюел ецн б MZPADR CLC ;ткюц сяоеьмни гюцпсгйх RETURN ;бнгбпюр б лнмхрнп .END ;йнмеж