; *********************************************************************
; EDIT00 - Stand alone pascal editor header etc
; Pascal editor file 00
; B.Bridgwater 19.1.84
; *********************************************************************
;
;------------------------------------------------------------------------
PasROM1 ;Sideways ROM header
      jmp language
      jmp service
      = &C2
      = copyright-PasROM1
      = 1
      = "Edit"
      = 0
      = "1.20"
copyright = 0
      = "(C)1983 Acorn"
      = 0
;------------------------------------------------------------------------
ROM1BRK ;Outputs 'brk' error message, & jumps to relevant re-entry
;point. Detailed action depends on value of 'brkaction' on
;entry -
;
; brkaction = 0  Outputs error message, with line number and 
;                 filename if debugflag set, and jumps to
;                 supvloop.
;
;              1  Outputs error message, and jumps to supvloop.
;                      
;              2  Moves cursor to editor status position,
;                 outputs error message, then prompts for space
;                 before jumping to editcont.
;
;              3  Outputs error message, and jumps to starloop.
;
      ldxIM &FF
      txs
      ;
      ldx brkaction
      cpxIM 2
      bne brkstar
      ;
brkedit jsr csr0statusY
      jsr supvBRKmess
      ;
      jsr curoff
      jsr strimo
      = CR
      = "********* SPACE to continue *********",0
brk1loop jsr edrdch
      cmpIM space
      bne brk1loop
      ;
      jsr normalizetextnscreenX
      jmp editcont
      ;
brkstar jsr supvBRKmess
      jmp starloop
;------------------------------------------------------------------------
supvBRKmess ;Output error message dependent on error No. & debugflag.
;Pascal errors have form BRK; EQUQ errno; = 0, the
;0 being used for recognition.
;
      lda &FD
      sta string
      lda &FE
      sta string+1
      ;
BRKoutput jsr OSNEWL
      jsr strout
      ;
      jmp OSNEWL
;------------------------------------------------------------------------
BRKmesstab ;Pascal error messages - last top bit set.
;
brkX1 brk
       = errX1
       = "Escape"
       = 0
brkX3 brk
       = errX3
       = "File too big"
       = 0
brkX4 brk
       = errX4
       = "No text"
       = 0
brkX6 brk
       = errX6
       = "No room"
       = 0
brkD54 brk
       = errD54
       = "Bad number"
       = 0
brkX16 brk
       = errX16
       = "Syntax error"
       = 0
brkX17 brk
       = errX17
       = "Not found"
       = 0
brkX18 brk
       = errX18
       = "Bad marking"
       = 0
brkX19 brk
       = errX19
       = "Bad field"
       = 0
brkX20 brk
       = errX20
       = "Mark(s) set"
       = 0
;------------------------------------------------------------------------
service ;Recognise *help
;                  *edit
;
      cmpIM 4
      beq unknowncommand
      cmpIM 9
      bne servexit
      ;
      ;*HELP response
      ;
      tya
      pha
      ldyIM 11
helploop ldaAY helpinfo
      jsr OSASCI
      dey
      bpl helploop
      pla
      tay
      ldaIM 9
servexit rts
      ;
helpinfo = CR
      = "02.1 TIDE"
      = CR
;------------------------------------------------------------------------
unknowncommand ;Recognise *edit as command to enter language.
;
      tya
      pha
      ldxIM 3
ucomloop ldaIY &F2
      cmpIM "."
      beq ucommine
      andIM &DF
      cmpAX helpinfo+6
      bne ucomexit
      iny
      dex
      bpl ucomloop
      ldaIY &F2
      cmpIM space+1
      bcc ucommine
      ;
ucomexit pla
      tay
      ldaIM 4
      ldx &F4
      rts
      ;
ucommine ;Command recognised - enter self as a language.
      ;
      ldaIM &8E
      ldx &F4
      jmp OSBYTE
;------------------------------------------------------------------------
language ;Pascal system entry point. Memory allocation is delimited as
;shown below -
;
;  PAGE              EOT marker for compiler                    HYMEM
;  v                 v                                              v
; +-+---------------+-+----------------+-------------------------+-+
; |$|    Text       |*|     Code       |                         |$|
; +-+---------------+-+----------------+-------------------------+-+
;    ^               ^ ^                ^                         ^
;    TSTART       TEND CSTART           CEND                   TMAX
;
      cli
      cld
      ;
      ldxIM &FF
      txs
      ;
      ldaIM :LSB: ROM1BRK
      sta BRKV
      ldaIM :MSB: ROM1BRK
      sta BRKV+1
      ;
      ;Read Machine High Order Address.
      ldaIM &82
      jsr OSBYTE
      stx MHOA
      sty MHOA+1
      ;
      ;Read PAJE & HYMEM
      ldaIM &83
      jsr OSBYTE
      stx PAJE
      sty PAJE+1
      ldaIM &84
      jsr OSBYTE
      stx HYMEM
      sty HYMEM+1
      ;
      ;Set up edit (text) buffer delimiting pointers.
      ;
      clc
      lda PAJE
      adcIM 1
      sta TSTART
      lda PAJE+1
      adcIM 0
      sta TSTART+1
      ;
      ;CC gives -1
      lda HYMEM
      sbcIM 0
      sta TMAX
      lda HYMEM+1
      sbcIM 0
      sta TMAX+1
      ;
      jmp edit
;------------------------------------------------------------------------
      lnk edit01

