Macron fungerar inte, om man tänker till lite. Fundera på "skip" instruktionerna.
Jag har inte grävt mig ner i begränsningarna tillräckligt för att spontant komma på vad du menar. Utveckla gärna.
Linjärt för GPR, men inte för SFR?
Problemet är att de tillgängliga adress bitarna i instruktionerna inte räcker till förutom på de allra minsta modellerna med endast en bank.
Men varje bank har, PIC12F683, 127adresser - vilket räcker för både SFR och GPR. Visst, något färre GPR...
Men OK, jag förstår hur du menar.
Vad jag inte förstår är varför addera diverse
externa MSB, dvs bankadresser, horisontellt, istället för vertikalt.
De är ju för i hela friden redan givna en vertikal adress! En unik vertikal adress.
För PIC12F683...
00h - 1Fh > SFR bank 0 (med lite onyttjade luckor)
20h - 7Fh > GPR bank 0
80h - 9Fh > SFR bank 1 (med lite onyttjade luckor)
A0h - BFh > GPR bank 1
C0h - EFh > minneslucka bank 1
F0h - FFh > GPR bank 0 70h - 7Fh
Var och en inom åtta bitar.
Att var och en sedan har åtta bitar är inte värre än de sexton bitar som redan hanteras, exempelvis CCPR1L och CCPR1H etc.
Problemet förefaller ligga i hur instruktionerna är byggda.
Dels destination - ha en OPCODE för vardera ADDWF f, d etc, de är inte så många, skulle frigöra den nödvändiga biten. Alltså ADDWFF respektive ADDWFW.
Sedan blir adresseringen av OPCODE i sig märklig när den ändrar antal bitar den består av.
Vad skiljer ex 100111001 från 100111001?
Alltså 100111 001 från 10011100 1...?
Ska de gå att skilja åt måste minst en bit avskiljas från "OPCODE" till "typ av OPCODE", alltså bit- eller byteorienterad.
Dvs 0 00111 001 respektive 1 0011100 1.
MicroChip har krånglat till det... för oss.