diff level1/modules/boot_1773.asm @ 0:6641a883d6b0

Initial revision
author boisy
date Thu, 04 Apr 2002 16:34:12 +0000
parents
children cdfe69117a2f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/boot_1773.asm	Thu Apr 04 16:34:12 2002 +0000
@@ -0,0 +1,228 @@
+********************************************************************
+* Boot - OS-9 Level One V2 Boot for WD1773
+*
+* $Id$
+*
+* Ed.    Comments                                       Who YY/MM/DD
+* ------------------------------------------------------------------
+* 1      Tandy/Microware original version
+
+         nam   Boot
+         ttl   OS-9 Level One V2 Boot for WD1773
+
+         ifp1
+         use   defsfile
+         use   rbfdefs
+         endc
+
+tylg     set   Systm+Objct
+atrv     set   ReEnt+rev
+rev      set   $01
+edition  set   $01
+
+         mod   eom,name,tylg,atrv,start,size
+
+u0000    rmb   2
+u0002    rmb   2
+u0004    rmb   1
+size     equ   .
+
+name     fcs   /Boot/
+         fcb   edition
+
+* First, we make a stack... (5 bytes deep)
+start    clra
+         ldb   #$05
+MakeStak pshs  a
+         decb
+         bne   MakeStak
+
+         tfr   s,u
+         ldx   #DPort
+         leax  $08,x
+         lda   #$D0
+         sta   ,x
+         lbsr  L0174
+         lda   ,x
+         lda   #$FF
+         sta   u0004,u
+         leax  >L010E,pcr
+         stx   >$010A
+         lda   #$7E
+         sta   >$0109
+         lda   #$08
+         sta   >DPort
+         ldd   #$C350
+L0042    nop
+         nop
+         subd  #$0001
+         bne   L0042
+
+* search for a free page (to use as a 256 byte disk buffer)
+         pshs  u,x,b,a
+         clra
+         clrb
+         ldy   #$0001
+         ldx   <D.FMBM                 start of bitmap
+         ldu   <D.FMBM+2               end of bitmap
+         os9   F$SchBit
+         bcs   L009B
+         exg   a,b
+         ldu   $04,s
+         std   u0002,u
+         clrb
+
+* go get LSN0
+         ldx   #$0000
+         bsr   L00B0
+         bcs   L009B
+
+* get bootfile size from LSN0 and allocate memory for it
+         ldd   <DD.BSZ,y
+         std   ,s
+         os9   F$SRqMem
+         bcs   L009B
+         stu   $02,s
+         ldu   $04,s
+         ldx   $02,s
+         stx   u0002,u
+         ldx   <DD.BT+1,y              get starting sector
+         ldd   <DD.BSZ,y               and bootfile size
+         beq   L0094
+
+* this loop reads a sector at a time from the bootfile
+RdSctLp  pshs  x,b,a
+         clrb
+* X = sector #
+         bsr   L00B0
+         bcs   L0099
+         puls  x,b,a
+         inc   u0002,u
+         leax  $01,x
+         subd  #256
+         bhi   RdSctLp
+L0094    clrb
+         puls  b,a
+         bra   L009D
+L0099    leas  $04,s
+L009B    leas  $02,s
+L009D    puls  u,x
+         leas  5,s                     restore stack
+         rts                           return to OS9
+
+L00A2    clr   ,u
+         clr   u0004,u
+         lda   #$05
+         lbsr  L013A
+         ldb   #$03
+         lbra  L015F
+
+L00B0    lda   #$91
+         cmpx  #$0000
+         bne   L00C8
+         bsr   L00C8
+         bcs   L00BF
+         ldy   u0002,u
+         clrb
+L00BF    rts
+
+L00C0    bcc   L00C8
+         pshs  x,b,a
+         bsr   L00A2
+         puls  x,b,a
+
+L00C8    pshs  x,b,a
+         bsr   L00D3
+         puls  x,b,a
+         bcc   L00BF
+         lsra
+         bne   L00C0
+L00D3    bsr   L011D
+         bcs   L00BF
+         ldx   u0002,u
+         orcc  #FIRQMask+IRQMask
+         pshs  y
+         ldy   #$FFFF
+         ldb   #$80
+         stb   >DPort+8
+         ldb   #$39
+         stb   >DPort
+         lbsr  L0174
+         ldb   #$B9
+         lda   #$02
+L00F2    bita  >DPort+8
+         bne   L0104
+         leay  -$01,y
+         bne   L00F2
+         lda   #$09
+         sta   >DPort
+         puls  y
+         bra   L0119
+
+L0104    lda   >DPort+$0B
+         sta   ,x+
+         stb   >DPort
+         bra   L0104
+L010E    leas  $0C,s
+         puls  y
+         ldb   >DPort+8
+         bitb  #$04
+         beq   L0159
+L0119    comb
+         ldb   #E$Read                 E$READ error
+         rts
+
+L011D    clr   ,u
+         tfr   x,d
+         cmpd  #$0000
+         beq   L0136
+         clr   ,-s
+         bra   L012D
+L012B    inc   ,s
+L012D    subd  #$0012
+         bcc   L012B
+         addb  #$12
+         puls  a
+L0136    incb
+         stb   >DPort+$0A
+L013A    ldb   u0004,u
+         stb   >DPort+9
+         cmpa  u0004,u
+         beq   L0157
+         sta   u0004,u
+         sta   >DPort+$0B
+         ldb   #$13
+         bsr   L015F
+         pshs  x
+         ldx   #$222E
+L0151    leax  -1,x
+         bne   L0151
+         puls  x
+L0157    clrb
+         rts
+
+L0159    bitb  #$98
+         bne   L0119
+         clrb
+         rts
+
+L015F    bsr   L0172
+L0161    ldb   >DPort+8
+         bitb  #$01
+         bne   L0161
+         rts
+
+L0169    lda   #$09
+         sta   >DPort
+         stb   >DPort+8
+         rts
+
+L0172    bsr   L0169
+
+* Some type of delay??
+L0174    lbsr  L0177
+L0177    lbsr  L017A
+L017A    rts
+
+         emod
+eom      equ   *