;we kunnen heel appBackUpScreen(eerste 256bytes lijkt me toch niet) gebruiken om de tabel om te zetten in 2 matrices, ;gebruik makend van 3 stacks: stTblAtom, stTblAtomQt, stTblAtomIx ;en 2 vars: matDim & matSignChange ; ld hl, sttblatom ; call stackflush ; ; ld hl, sttblatomqt ; call stackflush ; ;lp2: ; ld hl, sttblatom ; call stackarpop ; call debuga ; ; ld hl, sttblatomqt ; call stackarpopde ; call debugde ; jr lp2 ; ; ld de, sttblatomqt ; ld bc, sttblatomix ; jr $ ;ld hl, sttblatomix ;call stacklength ;call debugbc ;aa: ; call stackpop ; call debuga ; jr aa xor a ld (lastColLading), a ;(cl004) ;rij 1en xor a ld (rij1en), a ld hl, stTblAtomIx call stacklength dec c;zit 1 dummy bij ld a, (matDim) ld l, a;zometeen nog een keer nodig cp c jr nc, geenrij1ennodig ld h, a ld a, c sub h;moet ook in hoevaak rij 1en ld (rij1en), a add a, l ld (matDim), a geenrij1ennodig: ld a, (rij1en) ld l, a ld a, (matDim) sub l inc a ld (listLength), a call clearAllUserVars ld hl, matE b_call (_mov9toop1) ld a, (rij1en) ld l, a ld a, (matDim) inc a sub l ld h, a ld l, 1 b_call (_createRmat) ld hl, matA b_call (_mov9toop1) ld a, (matDim) ld h, a ld l, a b_call (_createRmat) inc de inc de push de ld a, (matDim) ld l, a ld b, 2 call hlpowerb pop de push de call matClear ld hl, matB b_call (_mov9toop1) ld a, (matDim) ld h, a ld l, 1 b_call (_createRmat) inc de inc de push de ld a, (matDim) ld h, 0 ld l, a call matClear pop de pop ix push de xor a ld (matRow), a volgendAtom: ld hl, stTblAtomQt call stackFlush ld hl, stTblAtom call stackFlush ld a, (matRow) inc a ld (matRow), a ld e, a ld a, (matDim) cp e jp c, volgendAtom_ ld hl, stTblAtomIx call stackPop;a = atom die we gaan zoeken ;01 cp 212;duidt t einde aan jp z, volgendatom_ ;call debuga1 push af xor a ld (activeColumn), a ld (addedInColumn), a ld (inHalf), a ld a, $00;pos ld (sign), a ld (posorneg), a volgendeinTbl: pop de;d = atom die we zoeken push de ld hl, stTblAtom call stackArPop ;call debuga cp 250 jr z, nxtColumn cp d jp z, atomMatch ;niks bijzonders gevonden(ander atom) volgendeinTblPopQt: ld hl, stTblAtomQt call stackArPopDE;zodat index zelfde blijft jr volgendeinTbl nxtColumn: ld a, (addedInColumn) or a jr nz, welgeadd ;is niet geadd in deze column dus is nul, maar ix moet wel +9 push ix;ix = ix + 9 pop hl ld de, 9 add hl, de push hl pop ix welgeadd: ld a, (activeColumn) inc a ld (activeColumn), a ld e, a ld a, (matSignChange) cp e jr nz, nietPreciesPijl call checkBeideKanten xor a ld (inHalf), a nietPreciesPijl: ld a, (matDim) cp e jp c, volgendeinTbl_;einde tbl inc e cp e jr nc, notlastcolumn xor a ld (lastCol), a pop bc;zit atom in die we zoeken, we moeten deze ff poppen anders kunnen we niet bij die daarachter zit pop hl;zet deze ix op plaats van andere ix push ix push hl;ix = hl pop ix push bc ld a, $00;laatse column moet weer positief zijn ld (sign), a ; ld a, $80 ld (posorneg), a jr geenSignChange notlastcolumn: push af ld a, 1 ld (lastCol), a pop af ;(cp004) ld hl, (rij1en);l = hoeveel rijen sub l cp e jr nc, not1enColumn ld a, (rij1en) or a jr z, not1enColumn ;nu moeten we 1 invoegen en weer nxtColumn gaan xor a ld (sign), a ld hl, 1 call hl2op ld a, 1 ld (addedInColumn), a jr nxtColumn not1enColumn: ld a, (matSignChange) cp e jr nc, geenSignChange ld a, $80;neg ld (sign), a ld (posorneg), a geenSignChange: xor a ld (addedInColumn), a jp volgendeinTblPopQt atomMatch: ld a, 1 ld (addedInColumn), a ld hl, stTblAtomQt call stackArPopDE;de moet worden geadd op de plaats van ix in ander formaat, dat doet deze functie ex de, hl pop af push af;a = atom die we zoeken cp 150 jr nz, geenLadingAtom ld h, 0;(tis signed 1byte lading) ld a, l cp 128 jr c, nietnegatief xor a sub l ld l, a ld a, (posorneg) or a jr nz, draaiom2 draaiom1: ld a, $80;neg ld (sign), a jr nietnegatief_ nietnegatief: ld a, (posorneg) or a jr nz, draaiom1 draaiom2: ld a, $00;pos ld (sign), a nietnegatief_: ld a, (lastCol) or a jr nz, nietlastColLading ld a, (matRow) ld (lastColLading), a nietlastColLading: geenLadingAtom: call hl2op ld a, 1 ld (inHalf), a jp volgendeinTbl volgendeinTbl_: pop hl;junk pop hl;normale ix push ix push hl pop ix ld a, (rij1en);(cl004) or a jr z, geenrij geenrij: call checkbeidekanten jp volgendAtom volgendAtom_: jp matrixMathStart ; pop ix ;abab: ; ld a, (ix) ; call debuga ; inc ix ; ; jr abab ; ; jp aaaa_ matClear: ;in hl = elements ; de = begin mat in memory (with offset+2) ;del all call hlx9 ld b, h ld c, l ex de, hl call clear ret checkbeidekanten: ld a, (inHalf) or a ret nz ;foutmelding ld hl, stTblAtomIx call stackunget call stackpop cp 150 ret z;lading mag wel aan 1 kant missen ld h, 0 ld l, a add hl, hl;2byte per atom in atomList ld de, atomList-2;atom 1 begint precies op atomList add hl, de ld d, (hl) inc hl ld e, (hl) push de ld hl, atomnotbothsides ld de, buffer2 ld bc, atomnotbothsides_ - atomnotbothsides ldir ld hl, buffer2+7 pop de ld (hl), d ld a, 1 cp e jr nz, notone2 ld e, $f5 notone2: inc hl ld (hl), e ld hl, buffer2 call dspMsg jp menu2 clearAllUserVars: ld hl, 0 push hl ld hl, matA push hl ld hl, matB push hl ld hl, matC push hl ld hl, matD push hl ld hl, list1 push hl ld hl, matE push hl clearPopVars: volgendemat: pop hl xor a cp h ret z;h(en l) = 0 b_call (_mov9toop1) b_call (_findsym) jr c, volgendemat b_call (_delvararc) jr volgendemat