Guest User

Untitled

a guest
Feb 7th, 2020
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.64 KB | None | 0 0
  1. ORG 7C00H
  2. USE16
  3.  
  4. BPBBEG:
  5. JMP SHORT BPBPEND
  6. NOP
  7.  
  8. DB "PEDOS1.0"
  9. BYTSPERSEC: DW 512 ; total bytes per sector on this volume
  10. SECPERCLUS: DB 1 ; total sectors per cluster on this volume
  11. RSVDSECCNT: DW 1 ; unused
  12. NUMFATS: DB 2 ; total FATs on this volume
  13. ROOTENTCNT: DW 224 ; total entries in the Root Directory
  14. DW 80 * 36
  15. DB 240
  16. FATSZ16: DW 9 ; total sectors per FAT on this volume
  17. SECPERTRK: DW 18 ; total sectors per track on this idks
  18. NUMHEADS: DW 2 ; total heads per cyliner on this idks
  19. DD 0
  20. DD 0
  21. DB 0
  22. DB 0
  23. DB 41
  24. DD 0
  25. DB " "
  26. DB "FAT12 "
  27. ;
  28. ; PEDOS MEMORY MAP
  29. ;
  30. ; - -- ROM / VIDEO -- A000:0
  31. ; - -----------------
  32. ; - -- BIOS DATA -- 8000:0
  33. ; - -----------------
  34. ; - -- FREE -- ????:?
  35. ; - -----------------
  36. ; - -- BOOT / FREE -- 0000:7C00
  37. ; - -----------------
  38. ; - -- FREE -- ????:?
  39. ; - -----------------
  40. ; - -- DRIVERS -- ????:?
  41. ; - -----------------
  42. ; - -- SYSTEM -- 0050:0
  43. ; - -----------------
  44. ; - -- BIOS BATA -- 0000:400
  45. ; - -----------------
  46. ; - -- IVT -- 0000:0
  47. ;
  48.  
  49. ;
  50. ; INITIALIZE SEGMENT REGISTERS
  51. ;
  52. BPBPEND:
  53. XOR AX, AX
  54. MOV DS, AX
  55. CLI
  56. PUSH DS
  57. POP SS
  58. MOV SP, 7C00H
  59. PUSH DS
  60. PUSH CHKDSK
  61. STI
  62. RETF ; SET CS TO KNOWN VALUE
  63. ;
  64. ; LOAD ROOT DIRECTORY AND CHECK FOR
  65. ; SYSTEM FILE
  66. ;
  67. CHKDSK:
  68. MOV AX, WORD BUFFER
  69. SHR AX, 4
  70. MOV ES, AX ; ES = 07E0
  71. XOR AX, AX
  72. MOV AX, WORD [FATSZ16]
  73. MUL WORD [NUMFATS]
  74. ADD AL, BYTE [RSVDSECCNT]
  75. mov bx, 0x7e00
  76. MOV DI, 1
  77. CALL READSEC
  78.  
  79.  
  80. ; mov ah, 14
  81. ; mov al, '/'
  82. ; int 16
  83. ; jmp $
  84.  
  85. LEA SI, [FILE] ; ADDRESS OF FILENAME
  86. MOV DI, 0
  87. MOV CX, 11 ; 11 BYTES PER FAT FILENAME
  88. CLD
  89. REPZ CMPSB
  90. JZ LOADFILE
  91. JMP ERROR
  92.  
  93. ; DOSBIOS.SYS CONFIRMED: LOAD THE
  94. ; FILE INTO MEMORY.
  95.  
  96. LOADFILE:
  97. mov ah, 14
  98. mov al, '.'
  99. int 16
  100. jmp $
  101.  
  102. MOV AX, 32
  103. MOV BX, WORD [ROOTENTCNT] ; TOTAL FATS ON DISK
  104. MUL BX
  105. MOV BX, WORD [BYTSPERSEC] ; FAT SIZE IN SECTORS
  106. DIV BX
  107. ;
  108. ; AX = SIZE OF ROOT DIRECTORY
  109. ; IN SECTORS
  110. ;
  111. ADD AX, BP ; SIZE + LOCATION = DATA REGION
  112. POP BX
  113. PUSH BX
  114. MOV DI, 1 ; DOS SIZE IS HARD CODED FOR NOW - MAY
  115. CALL READSEC ; CHANGE IN THE FUTURE
  116. RUNDOS:
  117. POP BX
  118. PUSH 0
  119. PUSH BX
  120. RETF
  121. ;
  122. ; READ THE SPECIFIED SECTORS INTO MEMORY
  123. ; AT LOGICAL ES:BX
  124. ;
  125. ; IN: DX:AX = HEAD, TRACK, SECTOR NUMBER
  126. ; DI = SECTOR COUNT
  127. ;
  128. READSEC:
  129. PUSHA
  130. DIV WORD [SECPERTRK]
  131. ;
  132. ; AX = LBA / SECPERTRACK
  133. ; DX = LBA % SECPERTRACK
  134. ;
  135. MOV CX, DX
  136. INC CX ; CX = LBA 1
  137. XOR DX, DX
  138. DIV WORD [NUMHEADS]
  139. ;
  140. ; AX = (LBA / SECPERTRACK) / CYLHEADCNT = CYLINDER
  141. ; DX = (LBA / SECPERTRACK) % CYLHEADCNT = HEAD
  142. ;
  143. MOV CH, AL
  144. SHL AH, 6
  145. OR CL, AH
  146. MOV DH, DL
  147. MOV DL, 0
  148. ;
  149. ; DH = HEAD HUMBER
  150. ; DL = DRIVE
  151. ;
  152. MOV AH, 2
  153. MOV AL, 1
  154. INT 19
  155. JNC NEXTSEC ; IN CASE OF ERRORS, FOLLOW
  156. ERROR:
  157. LEA SI, [ERRMSG] ; SOMETHING WENT WRONG, SO THROW AN ERROR
  158. ;
  159. ; WRITE SPECIFIED STRING TO VIDEO
  160. ; MEMORY
  161. ;
  162. ; DS:SI = ADDRESS OF STRING
  163. ;
  164. PRINT:
  165. LODSB
  166. OR AL, 0
  167. JZ HALT
  168. MOV AH, 14
  169. MOV BX, 7
  170. INT 16
  171. JMP PRINT
  172. HALT:
  173. MOV AX, 0
  174. INT 22
  175. INT 25
  176. ;
  177. ; CONTINUE 'READSEC'
  178. ;
  179. NEXTSEC:
  180. POPA
  181. DEC DI
  182. JZ RETURN ; SKIP PRINT SUBROUTINE
  183. ADD BX, WORD [BYTSPERSEC]
  184. ADD AX, 1
  185. ADC DX, 0
  186. JMP READSEC
  187. RETURN:
  188. RET
  189. ;
  190. ; KEEP DATA BELOW CODE, UNTIL SECTOR
  191. ; MARKER
  192. ;
  193. ERRMSG: DB 10, "Disk Error or DOSBIOS.SYS is missing.", 13
  194. DB 10, "Press any key to restart.", 13, 10, 10, 0
  195. FILE: DB "DOSBIOS SYS"
  196.  
  197. TIMES (512 - 2) - ($ - $$) DB 0
  198.  
  199. MARKER: DW 0AA55H
  200. BUFFER:
  201. ;
  202. ; THE SYSTEM IS LOADED DIRECTLY AFTER
  203. ; BOOTSTRAP
  204. ;
Advertisement
Add Comment
Please, Sign In to add comment