; Copyright 2000, by Michael Vincent. All rights reserved. ; ; I'm typing this 01-09-2001 and all I can say is I hope this works! :) ; .nolist #include "asm.inc" #include "ion.inc" .list #define tempbyte saferam1 #define smallinputmax saferam1+1 #define smallinputlen saferam1+2 #define entry saferam1+3 .org $9D93 .db $BB,$6D ret jr nc,start title: .db "SuperCAS v0.1",0 start: set fullscrndraw,(iy+apiflg4) bcall(_clrscrnfull) bcall(_homeup) ld hl,title bcall(_puts) bcall(_newline) bcall(_newline) ld hl,author bcall(_puts) call Pause bcall(_clrscrnfull) ;Main screen here mainscrndraw: bcall(_clrscrnfull) ld hl,0 ld (pencol),hl ld hl,helpshow bcall(_vputs) ld h,2 ld bc,7 ld de,95*256+7 bcall(_iline) ld bc,19*256+6 ld de,19*256 bcall(_iline) ld b,38 ld d,b bcall(_iline) ld b,57 ld d,b bcall(_iline) ld b,76 ld d,b bcall(_iline) ld hl,57*256+2 ld (pencol),hl ld hl,MainScreen bcall(_vputs) ld de,57*256+22 ld (pencol),de bcall(_vputs) mainloop: ei \ halt bcall(_getcsc) or a jr z,mainloop cp skMode ret z cp skYequ jr z,CalculusScreen cp skWindow jr z,TrigScreen jr mainloop ret TrigScreen: jp start CalculusScreen: bcall(_clrscrnfull) ld hl,0 ld (pencol),hl ld hl,CalculusTitle bcall(_vputs) ld hl,20*256 ld (pencol),hl ld hl,entry ld b,20 call InputText ld hl,entry ld de,calcstr_lim ld b,4 call CompareStrings jr z,Calculus_Limit jp mainscrndraw nocomma: ld hl,27*256 ld (pencol),hl ld hl,errormessage2 bcall(_vputs) call Pause jp mainscrndraw nocloseparenthesis: ld hl,27*256 ld (pencol),hl ld hl,errormessage bcall(_vputs) call Pause jp mainscrndraw Calculus_Limit: ld hl,entry ld a,(smallinputlen) ld c,a ld a,')' ld b,0 cpir jr nz,nocloseparenthesis ld hl,entry ld a,(smallinputlen) ld c,a ld a,',' ld b,0 cpir jr nz,nocomma ld hl,entry ld a,(smallinputlen) ld c,a ld a,'x' ld b,0 cpir jr nz,noxinlimit jp mainscrndraw noxinlimit: ld hl,entry ld a,(smallinputlen) ld c,a ld a,',' ld b,0 cpir xor a dec hl ld (hl),a ld hl,entry ld a,(smallinputlen) ld e,a ld d,0 xor a add hl,de dec hl ld (hl),a ld hl,30*256 ld (pencol),hl ld hl,calcstr_lim_label bcall(_vputs) ld hl,entry+4 bcall(_vputs) ld hl,calcstr_lim_label3 bcall(_vputs) ld hl,entry+4 bcall(_vputs) ld hl,36*256 ld (pencol),hl ld hl,calcstr_lim_label2 bcall(_vputs) ld hl,entry ld a,(smallinputlen) ld c,a ld b,0 ld a,$00 cpir bcall(_vputs) call Pause jp mainscrndraw Pause: ei \ halt bcall(_getcsc) or a jr z,Pause ret CompareStrings: ld c,(hl) ld a,(de) cp c jr nz,stringsdontmatch inc hl inc de djnz CompareStrings xor a ret stringsdontmatch: ld a,1 or a ret InputText: set plotloc,(iy+plotflags) xor a ld (smallinputlen),a ld a,b ld (smallinputmax),a ld a,(pencol) ld (tempbyte),a push hl call XORSmallCursor pop ix smallinputloop: ei \ halt bcall(_getcsc) or a jr z,smallinputloop cp skEnter jp z,smallinputdone cp skClear jr z,smallinputrestart ld d,0 ld e,a in a,(4) bit 3,a jr z,altkeyboard ld hl,chartable-10 jr consmalli altkeyboard: ld hl,chartable2-10 consmalli: add hl,de ld a,(hl) or a jr z,smallinputLoop ld (ix),a inc ix push ix push af call XORSmallCursor pop af bcall(_vputmap) call XORSmallCursor pop ix ld hl,smallinputlen inc (hl) ld a,(smallinputmax) ld b,a ld a,(smallinputlen) cp b jr nz,smallinputloop smallinputdone: call XORSmallCursor res onInterrupt,(iy+onFlags) ret smallinputrestart: ld a,(smallinputlen) or a jp z,smallinputloop call XORSmallCursor ld a,(smallinputlen) ld b,a simovbackix: dec ix djnz simovbackix ld a,(tempbyte) ld b,a ld a,(pencol) sub b ld a,b ld (pencol),a push ix siclrloop: ld a,$20 push bc bcall(_vputmap) pop bc djnz siclrloop pop ix ld a,(tempbyte) ld (pencol),a call XORSmallCursor xor a ld (smallinputlen),a jp smallinputloop XORSmallCursor: push ix ld a,(penrow) ld b,a ld a,63 sub b ld c,a sub 5 ld e,a ld a,(pencol) ld b,a ld d,b ld h,2 bcall(_iline) pop ix ret .db 0,0,0,0,0,0,0,0,0,0,0 chartable: .db 0,"wrmh",0 .db 0,0,0,"vqlg",0,0,0,"zupkfc" .db 0,0,"ytojebx",0,"xsnida" .db 0,0,0,0,0,0,0,0,0,0,0,0 .db 0,0,0,0,0,0,0,0 chartable2: .db "+","-","*","/",$5e,0 .db 0,$1a,"369)",0,0,0,".258(",0,0 .db 0,"0147,",0,0,0,0,0,0,0,$12,$11 .db 0,0,0,0,0,0,0,0,0,0,0,0 .db 0,0,0,0,0,0,0,0 author: .db "Michael Vincent",0 helpshow: .db "(C) 2001, Michael Vincent.",0 MainScreen: .db "Calc",0 .db "Trig",0 CalculusTitle: .db "Calculus Functions",0 calcstr_lim: .db "lim(" errormessage: .db "ERROR: PARENTHESIS",0 errormessage2: .db "ERROR: COMMA",0 calcstr_lim_label: .db "lim ",0 calcstr_lim_label2: .db "x",$1c,0 calcstr_lim_label3: .db " = ",0 .end