nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 23 Apr 2024 18:10



Reply to topic  [ 32 posts ]  Go to page Previous  1, 2, 3
nedoPC-стандарт онлайновых приложений 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22567
Location: Silicon Valley
Reply with quote
К вопросу о том как работать с большими числами - как известно в Robby результат математических операций всегда сохраняется в 16-битном регистре L, однако, в соответствии с поздней спецификацией, старшая часть результата (старшее 16-битное слово) идёт в регистр H - соответственно по содержимому регистра H можно судить о том, было переполнение или нет - например, если мы будем последовательно возводить в квадрат числа и выводить в лог значения числа, регистра H и регистра L:
Code:
(num*num) // result in H and L
num = num + 1
под спойлером печать значений от 170 до 365 с квадратом разделённым на 2 слова как это считается в Rgrid:

 square
Code:
Robot 1 : 170 0 28900
Robot 1 : 171 0 29241
Robot 1 : 172 0 29584
Robot 1 : 173 0 29929
Robot 1 : 174 0 30276
Robot 1 : 175 0 30625
Robot 1 : 176 0 30976
Robot 1 : 177 0 31329
Robot 1 : 178 0 31684
Robot 1 : 179 0 32041
Robot 1 : 180 0 32400
Robot 1 : 181 0 32761
Robot 1 : 182 0 -32412
Robot 1 : 183 0 -32047
Robot 1 : 184 0 -31680
Robot 1 : 185 0 -31311
Robot 1 : 186 0 -30940
Robot 1 : 187 0 -30567
Robot 1 : 188 0 -30192
Robot 1 : 189 0 -29815
Robot 1 : 190 0 -29436
Robot 1 : 191 0 -29055
Robot 1 : 192 0 -28672
Robot 1 : 193 0 -28287
Robot 1 : 194 0 -27900
Robot 1 : 195 0 -27511
Robot 1 : 196 0 -27120
Robot 1 : 197 0 -26727
Robot 1 : 198 0 -26332
Robot 1 : 199 0 -25935
Robot 1 : 200 0 -25536
Robot 1 : 201 0 -25135
Robot 1 : 202 0 -24732
Robot 1 : 203 0 -24327
Robot 1 : 204 0 -23920
Robot 1 : 205 0 -23511
Robot 1 : 206 0 -23100
Robot 1 : 207 0 -22687
Robot 1 : 208 0 -22272
Robot 1 : 209 0 -21855
Robot 1 : 210 0 -21436
Robot 1 : 211 0 -21015
Robot 1 : 212 0 -20592
Robot 1 : 213 0 -20167
Robot 1 : 214 0 -19740
Robot 1 : 215 0 -19311
Robot 1 : 216 0 -18880
Robot 1 : 217 0 -18447
Robot 1 : 218 0 -18012
Robot 1 : 219 0 -17575
Robot 1 : 220 0 -17136
Robot 1 : 221 0 -16695
Robot 1 : 222 0 -16252
Robot 1 : 223 0 -15807
Robot 1 : 224 0 -15360
Robot 1 : 225 0 -14911
Robot 1 : 226 0 -14460
Robot 1 : 227 0 -14007
Robot 1 : 228 0 -13552
Robot 1 : 229 0 -13095
Robot 1 : 230 0 -12636
Robot 1 : 231 0 -12175
Robot 1 : 232 0 -11712
Robot 1 : 233 0 -11247
Robot 1 : 234 0 -10780
Robot 1 : 235 0 -10311
Robot 1 : 236 0 -9840
Robot 1 : 237 0 -9367
Robot 1 : 238 0 -8892
Robot 1 : 239 0 -8415
Robot 1 : 240 0 -7936
Robot 1 : 241 0 -7455
Robot 1 : 242 0 -6972
Robot 1 : 243 0 -6487
Robot 1 : 244 0 -6000
Robot 1 : 245 0 -5511
Robot 1 : 246 0 -5020
Robot 1 : 247 0 -4527
Robot 1 : 248 0 -4032
Robot 1 : 249 0 -3535
Robot 1 : 250 0 -3036
Robot 1 : 251 0 -2535
Robot 1 : 252 0 -2032
Robot 1 : 253 0 -1527
Robot 1 : 254 0 -1020
Robot 1 : 255 0 -511
Robot 1 : 256 1 0
Robot 1 : 257 1 513
Robot 1 : 258 1 1028
Robot 1 : 259 1 1545
Robot 1 : 260 1 2064
Robot 1 : 261 1 2585
Robot 1 : 262 1 3108
Robot 1 : 263 1 3633
Robot 1 : 264 1 4160
Robot 1 : 265 1 4689
Robot 1 : 266 1 5220
Robot 1 : 267 1 5753
Robot 1 : 268 1 6288
Robot 1 : 269 1 6825
Robot 1 : 270 1 7364
Robot 1 : 271 1 7905
Robot 1 : 272 1 8448
Robot 1 : 273 1 8993
Robot 1 : 274 1 9540
Robot 1 : 275 1 10089
Robot 1 : 276 1 10640
Robot 1 : 277 1 11193
Robot 1 : 278 1 11748
Robot 1 : 279 1 12305
Robot 1 : 280 1 12864
Robot 1 : 281 1 13425
Robot 1 : 282 1 13988
Robot 1 : 283 1 14553
Robot 1 : 284 1 15120
Robot 1 : 285 1 15689
Robot 1 : 286 1 16260
Robot 1 : 287 1 16833
Robot 1 : 288 1 17408
Robot 1 : 289 1 17985
Robot 1 : 290 1 18564
Robot 1 : 291 1 19145
Robot 1 : 292 1 19728
Robot 1 : 293 1 20313
Robot 1 : 294 1 20900
Robot 1 : 295 1 21489
Robot 1 : 296 1 22080
Robot 1 : 297 1 22673
Robot 1 : 298 1 23268
Robot 1 : 299 1 23865
Robot 1 : 300 1 24464
Robot 1 : 301 1 25065
Robot 1 : 302 1 25668
Robot 1 : 303 1 26273
Robot 1 : 304 1 26880
Robot 1 : 305 1 27489
Robot 1 : 306 1 28100
Robot 1 : 307 1 28713
Robot 1 : 308 1 29328
Robot 1 : 309 1 29945
Robot 1 : 310 1 30564
Robot 1 : 311 1 31185
Robot 1 : 312 1 31808
Robot 1 : 313 1 32433
Robot 1 : 314 1 -32476
Robot 1 : 315 1 -31847
Robot 1 : 316 1 -31216
Robot 1 : 317 1 -30583
Robot 1 : 318 1 -29948
Robot 1 : 319 1 -29311
Robot 1 : 320 1 -28672
Robot 1 : 321 1 -28031
Robot 1 : 322 1 -27388
Robot 1 : 323 1 -26743
Robot 1 : 324 1 -26096
Robot 1 : 325 1 -25447
Robot 1 : 326 1 -24796
Robot 1 : 327 1 -24143
Robot 1 : 328 1 -23488
Robot 1 : 329 1 -22831
Robot 1 : 330 1 -22172
Robot 1 : 331 1 -21511
Robot 1 : 332 1 -20848
Robot 1 : 333 1 -20183
Robot 1 : 334 1 -19516
Robot 1 : 335 1 -18847
Robot 1 : 336 1 -18176
Robot 1 : 337 1 -17503
Robot 1 : 338 1 -16828
Robot 1 : 339 1 -16151
Robot 1 : 340 1 -15472
Robot 1 : 341 1 -14791
Robot 1 : 342 1 -14108
Robot 1 : 343 1 -13423
Robot 1 : 344 1 -12736
Robot 1 : 345 1 -12047
Robot 1 : 346 1 -11356
Robot 1 : 347 1 -10663
Robot 1 : 348 1 -9968
Robot 1 : 349 1 -9271
Robot 1 : 350 1 -8572
Robot 1 : 351 1 -7871
Robot 1 : 352 1 -7168
Robot 1 : 353 1 -6463
Robot 1 : 354 1 -5756
Robot 1 : 355 1 -5047
Robot 1 : 356 1 -4336
Robot 1 : 357 1 -3623
Robot 1 : 358 1 -2908
Robot 1 : 359 1 -2191
Robot 1 : 360 1 -1472
Robot 1 : 361 1 -751
Robot 1 : 362 1 -28
Robot 1 : 363 2 697
Robot 1 : 364 2 1424
Robot 1 : 365 2 2153

365^2=133225=0x20869 и 0x0869 это 2153 (т.е. H=2 и L=2153)

P.S. Одна из неприятных особенностей такого подхода состоит в том, что для того, чтобы убедиться, что у нас в L действительно получилось отрицательное число, то нужно проверить знак регистра H - если там -1, то значит ответ действительно отрицательный и находится в пределах от -32768...-1, а если там 0, то было переполнение и результат является положительным в пределах от 32767 до 65535...

_________________
:dj: https://mastodon.social/@Shaos


25 Apr 2023 03:19
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22567
Location: Silicon Valley
Reply with quote
Ещё один способ передачи информации из робота наружу - как текст через память робота:
Code:
def tri[36] // массив в памяти робота в котором хранится троичная строка вида "OOO...ONOPPON"
...
msg() // A=id, B=len, C=adr
{
 COMMAND 2
}

print3()
{
 for(jj=0;jj<36;jj++)
 {
   if(tri[jj]!='O') break
 }
 if(jj==36) jj=35
 msg(0,36-jj,&tri[jj]) // третьим аргументом указатель на первый символ в строке не равный 'O' (либо на последний 'O' если строка целиком состоит из символов 'O')
}
А вот читающая функция из HTML/JS:
Code:
function command2(r) {
 var id = r.regs[0xA];
 var len = r.regs[0xB];
 var adr = r.regs[0xC];
 var str = "";
 var i,j;
 for(i=0;i<len;i++) {
    str += String.fromCharCode($R.read(r,adr++));
 }
 if(id>=0) {
   $_('output',str);
 }
 else {
   j = -id;
   if(id>-100) {
    j -= 100;
    $_("radio"+j,"1");
   }
   else if(id>-200) {
    j -= 200;
    $_("input"+j,str);
   }
   else // <= -300
   {
    j -= 300;
    $_("input"+j,str);
   }
 }
}

$R.callback(2,command2); // регистрируем обработчик для COMMAND 2
Как можно видеть в регистре A передаётся идентификатор элемента веб-интерфейса, текст которого мы хотим поменять, в регистре B - длина строки, и регистр C - это адрес строки в памяти робота - непосредственно чтение из памяти делает вот в этом цикле:
Code:
 for(i=0;i<len;i++) {
    str += String.fromCharCode($R.read(r,adr++));
 }
Так как ячейки памяти робота 16-битные, то такие строки могут содержать юникод - я до этого уже экспериментировал с передачей русских букв UTF8 в робота - думаю вывести их обратно тоже не составит труда, но пока я чисто с ASCII работаю...

Это я троичный конвертер строю если что...

_________________
:dj: https://mastodon.social/@Shaos


02 May 2023 22:33
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 32 posts ]  Go to page Previous  1, 2, 3

Who is online

Users browsing this forum: Bing [Bot] and 46 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.