þ a‹R þ w ?þ m
Z<     þ hý	 o     þ nSystem-wide$LIST
	NAME	JumpToDevice

; This is Rom.JmpStart.ASM.  This acts as a main
; module for CCOS.  This has to be done
; because the Intel linker does not have a start
; command.

EXTRN CnoLineOut: FAR

 
;         Constants 

 loadSeg	        EQU	  2D8H
 startOfRom      EQU   8000h
 bootMsgLen      EQU   21
 cr              EQU   0dh
 lf              EQU   0ah

romHeader STRUC
  romHeaderInfo         DB 9 DUP (?)
  moreRomHeaderInfo     DB 12 DUP (?)
  evenMore              DB 112 DUP (?)
  evenEvenMore          DB 9 DUP (?)
  fileOneStart          DW ?
  fileOneLength         DW ?
  fileTwoStart          DW ?
  fileTwoLength         DW ?
romHeader ENDS

RomHeaderSeg SEGMENT AT (9ff0h)
RomHeaderSeg ENDS

RomJumpStart	SEGMENT	AT (9000h)
   ASSUME CS:RomJumpStart, ES:RomHeaderSeg

;   PUSH CS
;   MOV  AX, OFFSET bootMsg
;   PUSH AX
;   MOV  AX, bootMsgLen
;   PUSH AX
;   CALL CnoLineOut
   MOV  AX, RomHeaderSeg   ; address of romHeader
   MOV  ES, AX
   MOV  CX, ES:fileTwoLength
   SHL  CX, 1
   SHL  CX, 1
   SHL  CX, 1
   SHL  CX, 1              ; make selector into byte count
   MOV  AX, ES:fileTwoStart
   ADD  AX, startOfRom
   MOV  DS, AX             ; seg of ram file
   MOV  SI, 0
   MOV  DI, 0
   MOV  AX, loadSeg
   MOV  ES, AX             ; addr of ram area

   CLD
   REP  MOVSB

   PUSH ES
   XOR  AX, AX
   PUSH AX

LongRet PROC FAR
   RET
LongRet ENDP

;bootMsg:  
;   DB cr, lf, ' Starting GRiD-OS', cr, lf

RomJumpStart	ENDS

	END
